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

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

Что такое WP-Cron и как он работает

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

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

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

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

function wpinfo_delete_old_posts() {
    $days = 30; // количество дней, старше которых записи будут удалены
    $date_query = array(
        array(
            'column' => 'post_date',
            'before' => "$days days ago",
        ),
    );

    $query_args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => $date_query,
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($query_args);

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

Разберём код:

  • Устанавливаем период — 30 дней.
  • Создаём date_query для выборки записей, дата публикации которых раньше 30 дней назад.
  • Ищем все опубликованные записи, соответствующие условию.
  • Удаляем каждую запись принудительно.

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

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

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

add_action('wpinfo_daily_old_posts_deletion', 'wpinfo_delete_old_posts');

Пояснения:

  • Функция wpinfo_schedule_old_posts_deletion проверяет, не запланирована ли уже задача, и если нет — добавляет её с интервалом daily (один раз в сутки).
  • Хук wpinfo_daily_old_posts_deletion привязывается к нашей функции удаления.
  • Хук wp используется для инициации проверки при загрузке сайта.

Проверка и удаление запланированных задач

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

function wpinfo_clear_old_posts_deletion_schedule() {
    $timestamp = wp_next_scheduled('wpinfo_daily_old_posts_deletion');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpinfo_daily_old_posts_deletion');
    }
}

Запустите эту функцию один раз, например, через админский хук или вручную, чтобы отменить удаление.

Выбор плагинов для автоматизации удаления контента

Если вы не хотите писать код, можно использовать плагины, которые позволяют управлять устаревшим контентом:

  • Clearfy Pro — расширенный плагин для оптимизации и очистки WordPress, включая автоматическое удаление неиспользуемых данных и устаревших записей. Подробнее на wpshop.ru.
  • WP Remark — плагин для управления отзывами и комментариями, тоже помогает автоматизировать удаление спама и старого контента, что косвенно влияет на чистоту базы данных.

Советы по безопасному удалению контента

Перед настройкой автоматического удаления учитывайте следующие моменты:

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

Пример расширения функции с фильтрацией по категории

function wpinfo_delete_old_posts_by_category() {
    $days = 30;
    $category_slug = 'novosti';

    $date_query = array(
        array(
            'column' => 'post_date',
            'before' => "$days days ago",
        ),
    );

    $query_args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => $date_query,
        'category_name'  => $category_slug,
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($query_args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}

Таким образом, можно гибко управлять удалением старого контента.

Как создать собственный шорткод в WordPress
02.11.2025
Как правильно настроить URL для кастомных типов записей в WordPress
30.12.2025
WooCommerce: как отключить возможность повторного добавления товара в корзину
25.05.2026
Как настроить автоматическое удаление забытых через 30 дней пользователей в WordPress
14.03.2026
Как использовать автоматическое удаление старых записей в WordPress с помощью WP-Cron
21.03.2026