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

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

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

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

1. Создаём функцию для удаления постов старше заданного срока

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

function wp3_delete_old_posts() {
    $days = 365; // количество дней, старше которых посты удаляются
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = [
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => $date_threshold,
            ],
        ],
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    ];

    $old_posts = get_posts($args);

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

2. Регистрируем событие WP-Cron

Далее необходимо зарегистрировать событие, которое будет запускать функцию по расписанию. Например, ежедневно.

add_action('wp3_daily_delete_old_posts', 'wp3_delete_old_posts');

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

3. Добавляем очистку расписания при деактивации плагина или темы

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

function wp3_deactivate_cleanup() {
    $timestamp = wp_next_scheduled('wp3_daily_delete_old_posts');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wp3_daily_delete_old_posts');
    }
}
register_deactivation_hook(__FILE__, 'wp3_deactivate_cleanup');

Проверка результата после внедрения

Для проверки работы решения:

  • Вручную вызовите функцию wp3_delete_old_posts() через консоль WP-CLI или добавьте временный вызов в код, чтобы убедиться, что старые посты удаляются.
  • Проверьте записи в базе данных — посты старше указанного срока должны отсутствовать.
  • Убедитесь, что событие WP-Cron запланировано, выполнив wp cron event list через WP-CLI или установив плагин для мониторинга Cron событий.

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

  • WP-Cron не запускается автоматически: По умолчанию WP-Cron запускается при заходе посетителя на сайт. На малопосещаемых ресурсах cron-задачи могут откладываться. Решение — настроить системный cron на сервере для вызова wp-cron.php.
  • Удаление не происходит: Проверьте, что функция wp3_delete_old_posts() подключена и событие действительно запланировано. Включите отладку и посмотрите ошибки PHP.
  • Удаляются не те посты: Проверьте параметр $days и логику date_query. Убедитесь, что формат даты корректен.
  • Накопление запланированных задач: Не забывайте удалять расписание при деактивации, иначе задачи будут повторяться.

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

  • Безопасность: Используйте wp_delete_post($post_id, true) с осторожностью, так как удаление без перемещения в корзину необратимо. Рекомендуется сначала запускать без удаления (например, только логировать ID), чтобы проверить, какие посты будут удалены.
  • Производительность: Если у вас большое количество постов, удаляйте их партиями, чтобы не перегружать сервер. Например, добавьте пагинацию в запрос get_posts с posts_per_page и запускайте очистку по частям.
  • Мониторинг: Логируйте результаты работы cron-задачи в файл или через стандартный лог WordPress для отладки и контроля.

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

МетодПлюсыМинусы
WP-Cron + кастомная функцияГибкость настройки, управление через код, не требует сторонних плагиновЗависит от посещаемости сайта, требует базовых навыков программирования
Плагины очистки контента (например, WP Bulk Delete)Простой UI, много настроек, подходит новичкамДополнительная нагрузка, не всегда возможно тонко настроить логику
Внешние скрипты на сервере (cron + wp-cli)Надёжность, не зависит от посещаемости, можно запускать в любое времяТребует доступа к серверу и знаний Linux, сложнее в настройке
Как избежать проблем с перенаправлениями в WordPress
01.02.2026
Оптимальная настройка WooCommerce для высокой производительности и стабильности
23.12.2025
Как использовать хуки WordPress для расширения функциональности сайта
30.11.2025
Как автоматизировать создание бэкапов в WordPress
17.11.2025
Как добавить внешний API в WordPress с помощью WPGPT
13.02.2026