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

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

Что такое wp-cron и зачем он нужен для автоматического удаления записей

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

Используя wp-cron, можно программно задать периодические задачи, например, проверять наличие записей старше 30 дней и удалять их автоматически. Это удобно для сайтов с большим количеством устаревшего контента, например, новостных порталов, блогов с временными публикациями, каталогов.

Как создать функцию для удаления старых записей в WordPress

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

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

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        'fields'         => 'ids', // Получаем только ID записей
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

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

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

Регистрация задания в wp-cron для автоматического запуска

Чтобы функция выполнялась регулярно, нужно зарегистрировать крон-задачу. В WordPress это делается через wp_schedule_event. Добавим проверку и регистрацию при инициализации плагина или темы.

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

add_action('wplike_delete_old_posts_event', 'wplike_delete_old_posts');

Здесь мы создаём событие wplike_delete_old_posts_event, которое срабатывает ежедневно. При его срабатывании вызывается функция wplike_delete_old_posts. Это гарантирует, что удаление старых записей происходит автоматически.

Как тестировать и отлаживать wp-cron задачи

Поскольку wp-cron запускается при посещении сайта, для тестирования можно вручную вызвать событие:

do_action('wplike_delete_old_posts_event');

Этот вызов выполнит функцию удаления сразу. Рекомендуется сначала проверить, какие записи будут удалены, не вызывая удаления, а выводя их ID или заголовки:

function wplike_check_old_posts() {
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            error_log('Старый пост: ID ' . $post_id . ' - ' . get_the_title($post_id));
        }
    } else {
        error_log('Старых постов нет');
    }
}

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

Расширение функциональности: удаление записей по кастомным условиям

Выше мы рассмотрели простой пример с типом поста «post» и возрастом 30 дней. Но можно адаптировать код под свои задачи:

  • Удалять записи определённого таксономического термина (например, рубрики) — добавьте параметр tax_query в запрос.
  • Удалять кастомные типы записей, например, wplike_news или wplike_event.
  • Удалять записи, содержащие определённое мета-поле или значение.

Пример добавления фильтра по таксономии:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'category',
        'field'    => 'slug',
        'terms'    => 'news',
    ),
);

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

Использование плагина Clearfy Pro для управления cron в WordPress

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

С Clearfy Pro можно:

  • Отключить ненужные cron-задания, чтобы снизить нагрузку.
  • Добавлять собственные задачи через UI без кода.
  • Легко отлаживать и мониторить работу cron.

Это особенно полезно на больших сайтах с множеством запланированных задач.

Итоги и рекомендации по автоматическому удалению старых записей

Автоматизация удаления устаревшего контента — важная часть поддержки сайта. Используя wp-cron и собственные функции, вы можете держать сайт в актуальном состоянии без лишних усилий. Главное — тщательно тестировать код и не удалять важные данные по ошибке.

Если вы хотите расширить возможности и упростить управление — попробуйте использовать Clearfy Pro.

Как настроить автоматический импорт постов в WordPress с помощью REST API
13.03.2026
Автоматическое удаление записей по возрасту в WordPress
01.03.2026
Как использовать WPRemark для эффективного управления отзывами в WordPress
11.01.2026
Как автоматически удалять неактивные комментарии в WordPress
10.03.2026
Как сделать защиту от спама в комментариях WordPress
05.11.2025