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

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

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

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

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

Важно понимать, что WP-Cron работает только при активности пользователей на сайте. Если сайт малопосещаемый, стоит рассмотреть альтернативы, например, системный cron с вызовом wp-cron.php.

Определяем критерии для удаления старого контента

Перед реализацией автоматического удаления нужно чётко определить, какой контент считать «старым» и подлежащим удалению. Чаще всего это записи определённого типа, например, посты блога, которые не обновлялись или были опубликованы более 6 месяцев назад.

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

Пример критериев:

  • Тип записи: post
  • Дата публикации: старше 180 дней
  • Статус: опубликовано

Создание функции для удаления старого контента в WordPress

Пишем кастомную функцию, которая будет искать и удалять записи по заданным критериям. Вот пример кода:

function wpteam_delete_old_posts() {
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '180 days ago',
            ),
        ),
        'fields'         => 'ids',
        '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 для полного удаления
        }
    }
}

В этом коде мы получаем ID всех опубликованных постов старше 180 дней и полностью удаляем их из базы данных.

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

Чтобы функция wpteam_delete_old_posts запускалась автоматически, нужно добавить задачу в WP-Cron. Сделаем это с помощью хуков:

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

add_action( 'wpteam_daily_cleanup', 'wpteam_delete_old_posts' );

Здесь мы регистрируем ежедневное событие с именем wpteam_daily_cleanup, которое вызывает нашу функцию удаления.

Можно изменить интервал запуска, например, на еженедельный, создав собственный интервал через фильтр cron_schedules:

function wpteam_custom_cron_schedules( $schedules ) {
    if ( ! isset( $schedules['weekly'] ) ) {
        $schedules['weekly'] = array(
            'interval' => 604800, // 7 дней в секундах
            'display'  => __( 'Еженедельно' )
        );
    }
    return $schedules;
}
add_filter( 'cron_schedules', 'wpteam_custom_cron_schedules' );

Как проверить и отладить работу WP-Cron

Проверка работы WP-Cron иногда вызывает сложности из-за его особенностей. Вот несколько советов:

  • Используйте плагин WP Crontrol для просмотра и управления cron-задачами.
  • Добавьте логирование в функцию удаления, чтобы видеть, сколько записей удаляется при каждом запуске.
  • Для тестирования можно временно изменить интервал на минутный — чтобы проверить выполнение сразу.

Пример добавления логирования:

function wpteam_delete_old_posts() {
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '180 days ago',
            ),
        ),
        'fields'         => 'ids',
        '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 );
        }
        error_log( 'wpteam: Удалено постов: ' . count( $old_posts ) );
    } else {
        error_log( 'wpteam: Нет старых постов для удаления' );
    }
}

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

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

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

Для интеграции с WPShop можно рассмотреть плагин Clearfy Pro, который помогает оптимизировать сайт и включает опции для управления контентом.

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

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

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

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

Как создать автоматический импорт данных из Google Forms в WordPress
08.02.2026
Как автоматизировать удаление старых записей WordPress с помощью WP-Cron
15.01.2026
Как удалить удалённых пользователей из базы данных WordPress
10.12.2025
Как создать автоматическое отправление email в WordPress с помощью WP-Cron
11.02.2026
Как отключить плагины на отдельных страницах WordPress для ускорения сайта
11.01.2026

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.