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

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

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

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

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

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

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

Рассмотрим пример, как добавить кастомную задачу, которая будет ежедневно удалять записи типа post, старше 30 дней.

Для начала добавим хук активации задачи и функцию для удаления:

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');

// Функция удаления старых записей
function wptest_delete_old_posts() {
    global $wpdb;
    $days = 30; // количество дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $posts = get_posts([
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => [
            [
                'before' => $date_threshold,
                'inclusive' => true,
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => -1,
    ]);

    if (!empty($posts)) {
        foreach ($posts as $post_id) {
            wp_delete_post($post_id, true); // true — без перемещения в корзину
        }
    }
}
add_action('wptest_daily_old_posts_cleanup', 'wptest_delete_old_posts');

В этом коде мы создаём задачу wptest_daily_old_posts_cleanup, которая запускается ежедневно и вызывает функцию удаления старых постов.

Как удалять записи других типов или с определёнными условиями

Если вы хотите удалять записи другого типа (например, кастомный тип event) или с определённым метаполем, измените параметры в get_posts следующим образом:

$posts = get_posts([
    'post_type'      => 'event',
    'post_status'    => 'publish',
    'meta_query'     => [
        [
            'key'     => 'event_status',
            'value'   => 'expired',
            'compare' => '=',
        ],
    ],
    'date_query'     => [
        [
            'before'    => $date_threshold,
            'inclusive' => true,
        ],
    ],
    'fields'         => 'ids',
    'posts_per_page' => -1,
]);

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

Плагины для автоматического удаления старого контента в WordPress

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

  • Auto Delete Posts — позволяет настроить удаление постов по возрасту, статусу и типу записи. Есть гибкие фильтры и возможность удалять записи с определёнными метаполями.
  • WP Bulk Delete — мощный инструмент для массового удаления постов, страниц, пользовательских типов записей по различным условиям, включая дату, таксономии и метаполя.
  • Clearfy Pro — комплексный плагин оптимизации WordPress, в котором предусмотрена функция очистки базы от ненужных данных, включая автоматическое удаление устаревших черновиков и ревизий.

Эти плагины можно найти и установить через репозиторий WordPress или сайт WPSHOP.ru.

Как контролировать и отлаживать WP-Cron задачи

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

  • WP Crontrol — плагин для просмотра, редактирования и запуска задач WP-Cron вручную. Позволяет убедиться, что задача запланирована корректно.
  • Логирование — добавьте в функцию удаления запись в лог файл, чтобы отслеживать, когда и сколько записей удаляется:
function wptest_delete_old_posts() {
    // ... код удаления ...

    error_log('wptest: удалено ' . count($posts) . ' старых записей.');
}

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

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

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

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

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

Как автоматизировать удаление старого контента в WordPress
28.01.2026
Как избежать конфликтов между похожими плагинами в WordPress
03.02.2026
Как отладить проблемы с производительностью WordPress
08.11.2025
Как создать адаптивный шаблон WordPress с нуля
15.11.2025
Как создать наступление по AJAX в WordPress
04.11.2025