wphow.ru wordpress WPHow

Автоматизация удаления устаревших записей через AJAX в WordPress

В современном управлении сайтом на WordPress часто возникает необходимость регулярно удалять устаревшие записи — будь то новости, акции, или временный контент. Ручное удаление неудобно и занимает много времени, особенно если таких записей много. В этой статье разберем, как автоматизировать удаление устаревших постов с помощью AJAX, а также как связать эту логику с WP Cron для периодического запуска без участия пользователя.

Почему стоит использовать AJAX для удаления записей в WordPress

Удаление записей по расписанию удобно реализовать через WP Cron, но иногда требуется инициировать этот процесс вручную или с фронтенда, например, чтобы пользователь мог запускать очистку без перезагрузки страницы. AJAX позволяет отправлять запросы на сервер в фоне и получать ответ без перезагрузки, что улучшает UX.

С помощью AJAX вы можете:

  • Запускать процесс удаления по кнопке в админке или на фронтенде;
  • Отслеживать прогресс удаления и показывать уведомления;
  • Обеспечить безопасность через проверку nonce и прав пользователя.

Создание AJAX-обработчика для удаления устаревших записей

Для начала создадим функцию, которая будет удалять записи старше определенной даты. Для примера возьмем посты типа post, опубликованные более 30 дней назад.

function wphow_delete_old_posts() {
    if ( ! current_user_can('manage_options') ) {
        wp_send_json_error('Нет прав на выполнение действия');
    }
    check_ajax_referer('wphow_delete_old_posts_nonce', 'security');

    $args = array(
        'post_type'      => 'post',
        'date_query'     => array(
            array(
                'before' => '30 days ago',
            ),
        ),
        'posts_per_page' => 20,
        'fields'         => 'ids',
        'post_status'    => 'any',
    );

    $old_posts = get_posts($args);
    if ( empty($old_posts) ) {
        wp_send_json_success('Нет устаревших записей для удаления');
    }

    foreach ( $old_posts as $post_id ) {
        wp_delete_post($post_id, true);
    }

    wp_send_json_success(count($old_posts) . ' устаревших записей удалено');
}
add_action('wp_ajax_wphow_delete_old_posts', 'wphow_delete_old_posts');

Здесь мы делаем запрос постов старше 30 дней, получаем их ID и удаляем принудительно ($force_delete = true), чтобы миновать корзину. Функция проверяет права пользователя и nonce для безопасности.

Регистрация скрипта и локализация данных для AJAX

Теперь добавим кнопку и JS, который будет отправлять AJAX-запрос. В functions.php подключим скрипт и передадим ему необходимые параметры.

function wphow_enqueue_admin_scripts() {
    wp_enqueue_script('wphow-admin-ajax', get_template_directory_uri() . '/js/wphow-admin-ajax.js', array('jquery'), '1.0', true);
    wp_localize_script('wphow-admin-ajax', 'wphowAjax', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wphow_delete_old_posts_nonce'),
    ));
}
add_action('admin_enqueue_scripts', 'wphow_enqueue_admin_scripts');

На странице админки (например, в собственном меню или в существующем разделе) выводим кнопку:

<button id="wphow-delete-old-posts">Удалить устаревшие записи</button>
<div id="wphow-delete-result"></div>

JavaScript для обработки нажатия кнопки

jQuery(document).ready(function($) {
    $('#wphow-delete-old-posts').on('click', function() {
        $('#wphow-delete-result').text('Удаление...');
        $.post(wphowAjax.ajax_url, {
            action: 'wphow_delete_old_posts',
            security: wphowAjax.nonce
        }, function(response) {
            if (response.success) {
                $('#wphow-delete-result').text(response.data);
            } else {
                $('#wphow-delete-result').text('Ошибка: ' + response.data);
            }
        });
    });
});

Настройка автоматического удаления через WP Cron

Чтобы запускать удаление устаревших записей регулярно, например, раз в сутки, используем WP Cron. Добавим планировщик и свяжем его с нашей функцией удаления.

function wphow_schedule_old_posts_deletion() {
    if ( ! wp_next_scheduled('wphow_cron_delete_old_posts') ) {
        wp_schedule_event(time(), 'daily', 'wphow_cron_delete_old_posts');
    }
}
add_action('wp', 'wphow_schedule_old_posts_deletion');

function wphow_cron_delete_old_posts_callback() {
    $args = array(
        'post_type'      => 'post',
        'date_query'     => array(
            array('before' => '30 days ago'),
        ),
        'posts_per_page' => 20,
        'fields'         => 'ids',
        'post_status'    => 'any',
    );
    $old_posts = get_posts($args);
    foreach ( $old_posts as $post_id ) {
        wp_delete_post($post_id, true);
    }
}
add_action('wphow_cron_delete_old_posts', 'wphow_cron_delete_old_posts_callback');

Этот код проверяет, запланировано ли событие, и если нет — создает его на ежедневный запуск. Функция-обработчик удаляет записи по тому же принципу, что и AJAX-версия.

Рекомендации по безопасности и производительности

При автоматическом удалении важно учитывать нагрузку на сервер. Рекомендуется:

  • Удалять ограниченное число записей за один запуск (например, 20), чтобы избежать тайм-аутов.
  • Использовать транзиенты или опции для отслеживания прогресса при большом объеме.
  • Обязательно проверять права и nonce в AJAX, чтобы избежать несанкционированных вызовов.

Также полезно добавить логирование действий удаления, чтобы можно было отследить, когда и какие записи были удалены.

Применение плагинов для расширения функционала

Если не хочется писать код с нуля, можно обратить внимание на плагины для автоматизации. Например, Clearfy Pro позволяет оптимизировать работу сайта и включает инструменты для очистки базы данных, которые можно настроить на удаление устаревших данных.

Для более гибкой настройки можно использовать плагин WPRemark, который позволяет создавать удобные интерфейсы для управления контентом и его очистки.

Итоги и советы

Автоматизация удаления устаревших записей через AJAX и WP Cron — мощный инструмент для поддержания чистоты и актуальности базы данных WordPress. Такой подход уменьшает нагрузку на администраторов и повышает производительность сайта.

Важно тщательно тестировать код на тестовом сайте, соблюдать безопасность и учитывать нагрузку на сервер при большом количестве данных.

Используйте приведенные примеры как основу, адаптируя под свои задачи и расширяя функциональность в зависимости от требований проекта.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее