Как использовать WP-Cron для автоматического удаления старого контента в WordPress

Почему важно автоматически удалять устаревший контент

Ведение сайта на WordPress часто приводит к накоплению большого объема устаревших записей, тикетов, заказов или черновиков. Это нагружает базу данных и замедляет работу сайта. Автоматическое удаление такого контента — эффективный способ оптимизации и поддержания порядка без ручного вмешательства.

Диагностика проблемы: как определить, что пора удалять старый контент

Для начала определите, какой именно контент устарел и подлежит удалению. Например, в тикет-системе — закрытые тикеты старше 90 дней. В WooCommerce — отменённые или завершённые заказы старше 180 дней.

Проверьте объем таких записей запросом в базу данных через phpMyAdmin или WP-CLI:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'ticket' AND post_status = 'closed' AND post_date < NOW() - INTERVAL 90 DAY;

Если число большое, автоматизация удаления поможет избежать проблем с производительностью.

Настройка WP-Cron для удаления старого контента: пошаговое руководство

1. Создайте функцию для удаления

Добавьте в functions.php вашей темы или в отдельный плагин следующий код:

function wpticket_delete_old_tickets() {
    global $wpdb;
    $days = 90; // удалять тикеты старше 90 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    
    // Получаем ID тикетов для удаления
    $old_tickets = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'ticket' AND post_status = 'closed' AND post_date < %s",
        $date_threshold
    ));

    if (!empty($old_tickets)) {
        foreach ($old_tickets as $post_id) {
            wp_delete_post($post_id, true); // принудительное удаление без перемещения в корзину
        }
    }
}

2. Зарегистрируйте событие WP-Cron

Добавьте проверку и регистрацию планировщика:

if (!wp_next_scheduled('wpticket_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpticket_daily_cleanup');
}

add_action('wpticket_daily_cleanup', 'wpticket_delete_old_tickets');

Этот код запускает функцию очистки раз в сутки.

Как проверить, что автоматическое удаление работает

  • Включите логирование в WordPress, чтобы отследить вызов функции.
  • Добавьте временный лог в функцию удаления — например, запись в файл или в error_log:
function wpticket_delete_old_tickets() {
    error_log('Запущена очистка старых тикетов');
    // остальной код удаления...
}
  • Проверьте наличие удаления старых записей через админку или через SQL-запрос.
  • Для тестирования можно временно уменьшить период удаления, например, до 1 дня.

Частые ошибки и как их исправить

  • WP-Cron не запускается автоматически: на некоторых хостингах WP-Cron работает только при посещении сайта. Рекомендуется настроить системный cron (Linux) на вызов wget -q -O - https://example.com/wp-cron.php?doing_wp_cron.
  • Удаление не происходит: проверьте, что хук wpticket_daily_cleanup зарегистрирован и функция подключена.
  • Ошибка при удалении записей: убедитесь, что вызывается wp_delete_post($post_id, true) с параметром true для полного удаления без корзины.
  • Удаляются не те записи: проверьте условие в SQL-запросе и соответствие post_type и post_status.

Практические советы по безопасности и производительности

  • Обязательно делайте резервную копию базы данных перед внедрением автоматического удаления.
  • Если удаляемый объем большой, разбивайте процесс на части — например, удалять по 50 записей за раз, чтобы избежать таймаутов.
  • Используйте транзакции при работе напрямую с базой, если пишете более сложные запросы.
  • Настройте отдельный системный cron для надежного запуска задач, особенно на сайтах с малым трафиком.
  • В логах фиксируйте время запуска и количество удалённых записей для мониторинга эффективности.

Сравнение вариантов автоматического удаления контента

СпособПреимуществаНедостатки
WP-Cron (встроенный)Простота реализации, не требует доступа к серверуЗависит от посещаемости сайта, может не запускаться регулярно
Системный cron (Linux)Надежный и точный запуск задачТребует доступа к серверу и знаний серверной админки
Плагины-оптимизаторы (например, Clearfy Pro)Готовые решения с дополнительными функциямиМогут быть избыточны и нагружать сайт
Как настроить кастомные уведомления о тикетах в WordPress
14.01.2026
Как автоматизировать удаление старых тикетов в WordPress
30.05.2026
Добавление автоматического присоединения файлов к тикетам в WordPress
04.01.2026
Как избежать проблем с производительностью при обработке большого количества тикетов в WordPress
15.05.2026
Как добавить автоматическое удаление старых тикетов в WordPress
06.04.2026