Автоматическое удаление старых записей через AJAX в WordPress: пошаговое руководство

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

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

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

Удаление большого количества записей может занять значительное время и привести к таймауту при обычном запросе через PHP на сервере. Использование AJAX позволяет:

  • Выполнять удаление в фоне без перезагрузки страницы.
  • Показывать прогресс выполнения и информировать пользователя об ошибках.
  • Повысить UX админки, сделать процесс более интерактивным.

Это особенно важно при больших сайтах с большим объёмом данных.

Подготовка: определяем, какие записи удалять

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

Если у вас кастомный тип записи, например event, просто замените параметр post_type.

Код для выборки старых записей

function wpplugin_get_old_posts_ids( $days = 30 ) {
    $args = [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => [
            [
                'before' => date('Y-m-d', strtotime("-{$days} days")),
                'inclusive' => true,
            ],
        ],
        'fields'         => 'ids', // получаем только ID
        'posts_per_page' => -1,
    ];
    $query = new WP_Query( $args );
    return $query->posts;
}

Эта функция вернёт массив ID записей, которые старше 30 дней.

Создаём AJAX обработчик удаления записей

Далее добавим AJAX хук, который будет вызываться из админки для удаления выбранных записей.

Код AJAX обработчика

add_action('wp_ajax_wpplugin_delete_old_posts', 'wpplugin_delete_old_posts_callback');
function wpplugin_delete_old_posts_callback() {
    if ( ! current_user_can('delete_posts') ) {
        wp_send_json_error('У вас нет прав на удаление записей');
        wp_die();
    }

    $days = isset($_POST['days']) ? intval($_POST['days']) : 30;
    $old_posts = wpplugin_get_old_posts_ids($days);

    $deleted = 0;
    foreach ( $old_posts as $post_id ) {
        if ( wp_delete_post( $post_id, true ) ) { // true - без отправки в корзину
            $deleted++;
        }
    }

    wp_send_json_success("Удалено записей: $deleted");
    wp_die();
}

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

Добавляем кнопку и скрипт в админку

Чтобы вызвать AJAX из интерфейса, добавим в любой админский раздел кнопку и скрипт на JavaScript.

Пример добавления кнопки и скрипта

add_action('admin_footer', 'wpplugin_add_delete_old_posts_button');
function wpplugin_add_delete_old_posts_button() {
    if ( ! current_user_can('delete_posts') ) {
        return;
    }
    ?>
    <div style="margin:20px 0;">
        <label for="wpplugin_days">Удалять записи старше (дней): </label>
        <input type="number" id="wpplugin_days" value="30" min="1" style="width:60px;" />
        <button id="wpplugin_delete_old_posts_btn" class="button button-primary">Удалить старые записи</button>
        <span id="wpplugin_delete_result" style="margin-left:10px;"></span>
    </div>
    <script>
    (function($){
        $('#wpplugin_delete_old_posts_btn').on('click', function(e){
            e.preventDefault();
            var days = $('#wpplugin_days').val();
            $('#wpplugin_delete_result').text('Удаление...');
            $.post(ajaxurl, {
                action: 'wpplugin_delete_old_posts',
                days: days
            }, function(response){
                if(response.success){
                    $('#wpplugin_delete_result').text(response.data);
                } else {
                    $('#wpplugin_delete_result').text('Ошибка: ' + response.data);
                }
            });
        });
    })(jQuery);
    </script>
    <?php
}

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

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

Чтобы удаление происходило автоматически, настроим WP-Cron задачу, которая будет запускать удаление, например, ежедневно.

Регистрация Cron задачи

add_action('wpplugin_daily_delete_old_posts_event', 'wpplugin_cron_delete_old_posts');
function wpplugin_cron_delete_old_posts() {
    $days = 30; // можно сделать опцией
    $old_posts = wpplugin_get_old_posts_ids($days);
    foreach ($old_posts as $post_id) {
        wp_delete_post($post_id, true);
    }
}

// Регистрация события при активации плагина
register_activation_hook(__FILE__, function() {
    if (!wp_next_scheduled('wpplugin_daily_delete_old_posts_event')) {
        wp_schedule_event(time(), 'daily', 'wpplugin_daily_delete_old_posts_event');
    }
});

// Удаление события при деактивации
register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wpplugin_daily_delete_old_posts_event');
});

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

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

При работе с удалением данных всегда соблюдайте меры предосторожности:

  • Тестируйте на тестовом сайте, чтобы не удалить важный контент.
  • Резервное копирование базы перед массовым удалением — обязательное условие.
  • Используйте права доступа, чтобы исключить случайное удаление другими пользователями.
  • Если много данных, можно реализовать удаление порциями через AJAX, чтобы избежать таймаутов.

Альтернативные плагины и инструменты для автоматизации

Если не хотите писать код, рассмотрите готовые решения, например:

  • Clearfy Pro — плагин для оптимизации и очистки WordPress с возможностями удаления мусора.
  • WPCommunity — если у вас сайт сообщества, удобные инструменты для управления контентом.

Но собственная реализация даёт полный контроль и гибкость для любых нужд.

Как использовать WooCommerce хуки для автоматизации задач
15.06.2026
Автоматический импорт продуктов из Excel в WooCommerce на WordPress
16.12.2025
Как использовать хуки и фильтры в создании плагинов WordPress
30.12.2025
Как сделать постоянный AJAX запрос без кэширования в WordPress
10.12.2025
Как использовать функцию wp_enqueue_script для добавления собственных скриптов в WordPress
26.04.2026