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

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

Что такое WP Cron и зачем нужен автоматический удалитель записей

WP Cron — это встроенный планировщик задач WordPress, который позволяет запускать функции по расписанию. Автоматическое удаление старых записей помогает:

  • Сократить размер базы данных.
  • Улучшить производительность сайта.
  • Поддерживать актуальность контента.

Особенно полезно для новостных сайтов или блогов, где старый контент быстро теряет ценность.

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

Для начала напишем функцию, которая будет удалять записи, старше определенного количества дней. Например, удалим записи старше 180 дней.

function wpbloger_delete_old_posts() {
    global $wpdb;
    $days = 180; // количество дней

    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_date < %s AND post_status = 'publish' AND post_type = 'post'",
        $date_threshold
    ));

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

Данная функция ищет опубликованные записи старше 180 дней и удаляет их безвозвратно.

Регистрация Cron задачи для запуска функции

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

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

add_action('wpbloger_delete_old_posts_event', 'wpbloger_delete_old_posts');

Объяснение:

  • wpbloger_schedule_old_posts_deletion — проверяет, есть ли уже запланированная задача, и если нет, создаёт новую с интервалом daily.
  • Событие wpbloger_delete_old_posts_event — привязано к функции удаления wpbloger_delete_old_posts.

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

Если потребуется отменить автозадачу (например, для отладки), используйте код:

function wpbloger_clear_old_posts_deletion_schedule() {
    $timestamp = wp_next_scheduled('wpbloger_delete_old_posts_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpbloger_delete_old_posts_event');
    }
}

Вызовите wpbloger_clear_old_posts_deletion_schedule() один раз, чтобы удалить задачу. После этого можно удалить или изменить функцию.

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

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

  • Auto Delete Posts — позволяет настроить автоматическое удаление постов по возрасту.
  • Expired Post — плагин для управления сроком жизни публикаций.

Среди платных решений обратите внимание на Clearfy Pro, который включает расширенные инструменты оптимизации и очистки базы.

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

Автоматическое удаление старых записей через Cron — эффективный способ поддерживать сайт в порядке. Однако:

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

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

Как избежать конфликтов плагинов в WordPress: практические решения и примеры кода
09.12.2025
Как отключить Emoji в WordPress для ускорения сайта и оптимизации кода
10.04.2026
Автоматическое отключение неиспользуемых плагинов в WordPress
29.01.2026
Автоматическое удаление старых записей WordPress через Cron с примерами кода
25.02.2026
Как удалить неактивных пользователей WordPress
28.02.2026