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

Что такое WP-Cron и зачем он нужен для автоматизации задач

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

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

Если на сайте накапливается большой объем устаревшего контента, это может негативно влиять на производительность базы данных, SEO и удобство работы с админкой. Ручное удаление неудобно и требует времени. Автоматизация решения позволяет поддерживать чистоту данных и ускорять работу сайта.

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

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

Напишем функцию, которая удалит записи (посты) старше 180 дней. В этом примере удаляются записи типа post со статусом publish:

function wplesson_delete_old_posts() {
    global $wpdb;
    $days = 180;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Получаем ID постов, которые старше указанной даты
    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
        $date_threshold
    ));

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

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

Добавим событие, которое будет запускаться ежедневно. Для этого используем хук wp и проверим, зарегистрировано ли наше событие:

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

3. Подключаем функцию удаления к событию

add_action('wplesson_daily_delete_old_posts', 'wplesson_delete_old_posts');

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

  • В админке WordPress проверьте наличие удаленных записей старше 180 дней.
  • Для отладки временно добавьте логирование в функцию удаления, например, запись ID удаленных постов в файл или в debug.log.
  • Проверьте работу WP-Cron: введите wp cron event list если используете WP-CLI или используйте плагин WP Crontrol для проверки и запуска событий вручную.

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

  • WP-Cron не срабатывает: Если на сайте низкий трафик, WP-Cron может не запускаться вовремя. Решение — настроить системный cron на сервере для вызова wp-cron.php регулярно.
  • Удаление не происходит: Проверьте права пользователя, под которым работает WordPress, а также корректность SQL-запроса и статуса постов.
  • Удаляются нужные записи: Перед удалением уточните условия выборки, чтобы не удалять важный контент. Можно добавить проверку по меткам или категориям.

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

  • Для больших сайтов с тысячами записей удаление большого объема данных за один раз может нагрузить сервер. Рекомендуется делать удаление частями (пакетами по 50-100 записей) с использованием транзиентов или записей в опции для отслеживания прогресса.
  • Всегда делайте резервную копию базы данных перед автоматическими удалениями.
  • Для отладки используйте включенный WP_DEBUG и логирование.
  • Если сайт использует кеширование, после удаления старых записей сбрасывайте кеш.

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

МетодОписаниеПлюсыМинусы
WP-Cron + код Автоматизация через встроенный планировщик и кастомный код Гибкость, без сторонних плагинов, можно адаптировать под любые условия Зависит от трафика, возможно, задержки с выполнением
Плагин «Auto Delete Posts» Плагин с интерфейсом для удаления по условиям Простота настройки, не требует кода Может нагружать базу, не всегда гибок, риск конфликтов с другими плагинами
Системный cron + WP-CLI Запуск команд WP-CLI по расписанию через системный cron Надежность, точное выполнение без зависимости от трафика Требуется доступ к серверу и знания командной строки
Как использовать WPCommunity для создания форума на WordPress
02.01.2026
Как использовать REST API в WordPress для создания своего плагина
25.11.2025
Как изменить URL товара WooCommerce без потери SEO
22.04.2026
Как использовать хуки WooCommerce для кастомизации отзывов на товары
19.05.2026
Как создать автоматическое резервное копирование в WordPress с помощью кода и плагинов
08.02.2026