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

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

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

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

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

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

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

  • Черновики, которые не обновлялись длительное время
  • Старые ревизии записей
  • Записи определённого кастомного типа, устаревшие по дате публикации
  • Неопубликованные записи, забытые авторами

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

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

Для начала добавим функцию, которая будет искать и удалять черновики старше 30 дней. Поместите этот код в файл functions.php вашей темы или в отдельный плагин.

function wpmentor_delete_old_drafts() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));

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

    if (!empty($old_drafts)) {
        foreach ($old_drafts as $post_id) {
            // Удаляем запись без возможности восстановления
            wp_delete_post($post_id, true);
        }
    }
}

Эта функция получает ID всех черновиков старше 30 дней и удаляет их.

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

Теперь нужно зарегистрировать событие, которое будет вызывать нашу функцию, и настроить расписание. Сначала добавим хук:

add_action('wpmentor_delete_old_drafts_hook', 'wpmentor_delete_old_drafts');

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

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

Этот код запускается при хук wp, проверяет наличие задачи и ставит её, если она отсутствует.

Как отменить задачу, если она больше не нужна

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

function wpmentor_clear_old_drafts_schedule() {
    $timestamp = wp_next_scheduled('wpmentor_delete_old_drafts_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpmentor_delete_old_drafts_hook');
    }
}
// Раскомментируйте для отмены расписания
// add_action('wp', 'wpmentor_clear_old_drafts_schedule');

Расширение: удаление ревизий и неопубликованных записей

По аналогии с удалением черновиков можно добавить обработку ревизий. Пример функции для удаления ревизий старше 60 дней:

function wpmentor_delete_old_revisions() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-60 days'));

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

    if (!empty($old_revisions)) {
        foreach ($old_revisions as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}
add_action('wpmentor_delete_old_drafts_hook', 'wpmentor_delete_old_revisions');

Таким образом, одна задача WP-Cron будет очищать и черновики, и ревизии.

Использование плагина Clearfy Pro для автоматизации очистки

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

Практические рекомендации и безопасность

При автоматическом удалении данных важно учитывать следующие моменты:

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

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

Как установить ограничения на регистрацию в WordPress по домену и email
10.02.2026
Оптимизация загрузки шаблонов в WordPress для ускорения сайта
15.12.2025
WooCommerce: решение проблемы не обновляющегося SKU вариаций товаров
04.06.2026
Как создать и использовать shortcode в WordPress
30.11.2025
Авторизация через социальные сети в WordPress: настройка и примеры
15.04.2026