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

Почему важно автоматизировать удаление старого контента в WordPress

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

Однако вручную удалять посты — задача утомительная и требует времени. Именно поэтому стоит использовать автоматизацию на основе WP-Cron — встроенной системы планировщика задач WordPress, позволяющей запускать определённые функции по расписанию.

В этой статье мы подробно рассмотрим, как реализовать автоматическое удаление записей старше определённого возраста при помощи WP-Cron и приведём рабочие примеры кода.

Основы работы с WP-Cron для автоматических задач в WordPress

WP-Cron — это имитация системного cron, которая срабатывает при посещении сайта и позволяет запускать функции по расписанию. Чтобы использовать WP-Cron, нужно:

  • Зарегистрировать собственное событие (hook) для запуска функции.
  • Запланировать периодическое выполнение задачи.
  • Создать функцию, которая будет выполнять нужные действия — в нашем случае удалять старые записи.

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

Регистрация и планирование события WP-Cron

Для начала добавим в файл functions.php вашей темы или в кастомный плагин код, который регистрирует событие и планирует его выполнение каждые сутки:

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

Здесь мы проверяем, запланировано ли уже событие с именем wptest_daily_old_posts_cleanup. Если нет — создаём его с интервалом daily (ежедневно).

Создание функции для удаления старых записей

Теперь нужно написать функцию, которая будет находить и удалять записи, старше определённого количества дней. В примере ниже мы удалим все записи (посты) старше 180 дней (6 месяцев):

function wptest_delete_old_posts() {
    $days = 180; // количество дней
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

    // Параметры запроса для выборки постов
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        'fields'         => 'ids', // Только ID
        '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 для полного удаления без помещения в корзину
        }
    }
}
add_action( 'wptest_daily_old_posts_cleanup', 'wptest_delete_old_posts' );

Объяснение кода:

  • Используем date_query для выбора постов, опубликованных до даты-предела.
  • Получаем только ID постов для экономии памяти.
  • Удаляем каждый пост с помощью wp_delete_post с параметром true, чтобы не помещать в корзину, а удалять сразу.

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

Чтобы не ждать срабатывания WP-Cron, можно вручную запустить событие через административные плагины, например, WP Crontrol, или программно:

if ( function_exists( 'wp_cron' ) ) {
    do_action( 'wptest_daily_old_posts_cleanup' );
}

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

Дополнительные настройки и безопасность

1. Фильтрация по категориям или тегам: Если нужно удалить посты только из определённой категории, в запросе добавьте параметр category_name или tax_query.

2. Логирование удалений: Полезно вести лог, чтобы отслеживать, какие записи были удалены. Например, можно записывать ID и заголовки в файл или таблицу базы данных.

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

Пример расширенного запроса с фильтром категории

$args = array(
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'category_name'  => 'news', // удалять только из категории "news"
    'date_query'     => array(
        array(
            'before' => $date_threshold,
            'inclusive' => true,
        ),
    ),
    'fields'         => 'ids',
    'posts_per_page' => -1,
);

Полезные плагины для управления WP-Cron и оптимизации

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

  • WP Crontrol — позволяет просматривать, запускать и удалять запланированные задачи WP-Cron.
  • Clearfy Pro — плагин для оптимизации и очистки WordPress, в том числе управления задачами и удалением мусора.

Заключение по автоматизации удаления старых записей

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

Приведённые выше примеры кода можно адаптировать под свои нужды и расширять функциональность. Кроме того, использование плагинов для управления задачами упрощает контроль и отладку.

Как сделать автоматический откат обновлений WordPress при ошибках
12.01.2026
Автоматическое удаление старых записей в WordPress через WP-Cron
30.03.2026
Автоматический импорт постов в WordPress: плагины и кастомные решения
05.01.2026
Как автоматизировать обновления плагинов и тем WordPress без риска для сайта
31.01.2026
Как запретить автозагрузку медиа-содержимого в WordPress для ускорения сайта
27.03.2026