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

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

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

Многие забывают о том, что даже неактуальный контент занимает место в базе данных и замедляет работу сайта. Ручное удаление — это трудоёмкий процесс, особенно если сайт активен и публикаций много. Автоматизация через CRON позволяет настроить регулярное удаление записей по заданным критериям, например, старше 1 года, или статусов, например, черновики.

Такой подход обеспечивает:

  • Оптимизацию базы данных и ускорение запросов;
  • Уменьшение нагрузки на хостинг;
  • Чистоту админки — меньше мусора;
  • Автоматический контроль без участия администратора.

Используем WordPress CRON для автоматического удаления

WordPress имеет собственную систему планировщика задач — WP-Cron. Она запускается при каждом заходе на сайт и позволяет выполнять задачи по расписанию. Для удаления старых записей нам нужно:

  1. Создать функцию, которая удаляет записи по нужному условию;
  2. Зарегистрировать задачу в WP-Cron с определённым интервалом;
  3. Обеспечить возможность отмены задачи, если потребуется.

Пример такой функции, которая удаляет записи, опубликованные более года назад:

function wpmanual_delete_old_posts() {
    global $wpdb;
    $date = date('Y-m-d H:i:s', strtotime('-1 year'));
    $posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_date < %s AND post_status = 'publish'",
        $date
    ));

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

Регистрация CRON задачи в WordPress

Теперь нужно добавить задачу в расписание. Для этого используем хук wpmanual_schedule_delete_old_posts и функцию wp_schedule_event. Добавим следующий код в файл functions.php или в отдельный плагин:

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

add_action('wpmanual_delete_old_posts_hook', 'wpmanual_delete_old_posts');

Этот код проверит, не запланирована ли уже задача, и если нет — создаст ежедневный запуск. Хук wpmanual_delete_old_posts_hook вызывает функцию удаления записей.

Как отменить CRON задачу

Если нужно остановить автоматическое удаление, используйте функцию отмены расписания:

function wpmanual_clear_cron_job() {
    $timestamp = wp_next_scheduled('wpmanual_delete_old_posts_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpmanual_delete_old_posts_hook');
    }
}

Вызовите wpmanual_clear_cron_job() один раз, чтобы отключить задачу.

Удаление записей по другим критериям: черновики, ревизии, спам-комментарии

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

Удаление старых черновиков

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

function wpmanual_delete_old_drafts() {
    global $wpdb;
    $date = date('Y-m-d H:i:s', strtotime('-30 days'));
    $drafts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_date < %s AND post_status = 'draft'",
        $date
    ));

    foreach ($drafts as $draft_id) {
        wp_delete_post($draft_id, true);
    }
}

Добавьте вызов этой функции в отдельный CRON или объедините с основной функцией удаления.

Удаление ревизий

Ревизии накапливаются в базе и занимают место. Для удаления всех ревизий используйте:

function wpmanual_delete_post_revisions() {
    global $wpdb;
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}

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

Плагины для автоматизации очистки и оптимизации

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

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

Использование плагинов экономит время и минимизирует ошибки при настройке CRON.

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

При автоматическом удалении важно соблюдать осторожность, чтобы не потерять нужные данные. Советую:

  • Перед запуском на живом сайте протестировать код в тестовой среде;
  • Создавать резервные копии базы данных перед активацией CRON задач;
  • Ограничивать удаление только явно устаревших и неактивных записей;
  • Использовать функцию wp_delete_post с параметром true для полного удаления, если мусор не нужен;
  • Мониторить логи ошибок и производительности после запуска задач.

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

WooCommerce: как использовать хуки для изменения шаблонов писем
16.05.2026
Как отключить автовоспроизведение видео в WordPress
14.12.2025
Автоматическое удаление старых записей через CRON в WordPress
16.02.2026
Как проверить и использовать WP-Cron для автоматизации задач в WordPress
15.04.2026
Как проверить и использовать активные CRON задачи в WordPress
05.02.2026