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

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

Что такое автоматическое удаление старого контента и зачем оно нужно

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

Это помогает:

  • Уменьшить размер базы данных и повысить скорость работы сайта.
  • Поддерживать актуальность контента.
  • Избежать ошибок и проблем с SEO из-за устаревших материалов.

Использование WP-Cron для автоматического удаления записей

WordPress имеет встроенную систему планировщика задач — WP-Cron. С её помощью можно запустить пользовательскую функцию по расписанию.

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

Ниже пример функции, которая удаляет записи типа post, опубликованные более 180 дней назад:

function wpbit_delete_old_posts() {
    global $wpdb;
    $days = 180; // сколько дней хранить записи
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

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

    foreach ($posts as $post_id) {
        wp_delete_post($post_id, true); // true — безвозвратно
    }
}

Регистрация задачи в WP-Cron

Далее нужно зарегистрировать событие и прикрепить функцию к нему. Добавим в functions.php или в собственный плагин:

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

add_action('wpbit_daily_delete_old_posts', 'wpbit_delete_old_posts');

Этот код запускает функцию удаления раз в сутки. Можно менять частоту на 'hourly' или 'weekly' в зависимости от потребностей.

Автоматизация удаления для пользовательских типов записей и таксономий

Если вы используете кастомные типы записей, например, «события» или «акции», то нужно слегка изменить функцию:

function wpbit_delete_old_custom_posts() {
    $post_type = 'event'; // ваш кастомный тип записи
    $days = 30; // например, удалять записи старше 30 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

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

    foreach ($posts as $post_id) {
        wp_delete_post($post_id, true);
    }
}

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

Использование плагинов для автоматизации удаления старого контента

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

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

Все эти плагины можно найти и скачать на WPSHOP.ru с удобным управлением и настройками.

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

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

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

Для логирования можно добавить простой лог в файл:

function wpbit_delete_old_posts() {
    $days = 180;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $posts = get_posts(array(
        'post_type' => 'post',
        'date_query' => array(array('before' => $date_threshold, 'inclusive' => true)),
        'posts_per_page' => -1,
        'post_status' => 'publish',
        'fields' => 'ids',
    ));

    $log_file = WP_CONTENT_DIR . '/wpbit-delete-log.txt';
    foreach ($posts as $post_id) {
        wp_delete_post($post_id, true);
        file_put_contents($log_file, "Deleted post ID: $post_id at " . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
    }
}

Настройка уведомлений о выполнении удаления

Чтобы получать уведомления об успешном выполнении задачи, можно добавить отправку email:

function wpbit_delete_old_posts_notify() {
    $deleted = 0;
    $days = 180;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $posts = get_posts(array(
        'post_type' => 'post',
        'date_query' => array(array('before' => $date_threshold, 'inclusive' => true)),
        'posts_per_page' => -1,
        'post_status' => 'publish',
        'fields' => 'ids',
    ));

    foreach ($posts as $post_id) {
        wp_delete_post($post_id, true);
        $deleted++;
    }

    if ($deleted > 0) {
        wp_mail('admin@example.com', 'WPBit: Удаление старых записей', "Удалено $deleted записей, старше $days дней.");
    }
}
add_action('wpbit_daily_delete_old_posts', 'wpbit_delete_old_posts_notify');

Не забудьте заменить admin@example.com на настоящий email администратора.

Выводы и рекомендации

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

Как создать динамический виджет в WordPress: практическое руководство
14.11.2025
Как установить автоматическое удаление старого контента WordPress с помощью AJAX и Cron
13.04.2026
Как создать автоматический отчет по активности пользователей в WordPress
22.12.2025
Как использовать REST API WordPress для автоматизации задач
15.12.2025
Как настроить автоматическую отправку email уведомлений в WordPress
01.01.2026