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

Когда на сайте WordPress накапливается много контента, особенно если есть разные типы записей (Custom Post Types), часто возникает необходимость автоматически удалять устаревший контент для освобождения места и поддержания актуальности данных. В этой статье мы подробно разберем, как настроить автоматическое удаление старого контента по типу записи. Это полезно для сайтов с большим объемом данных, новостных порталов, блогов и любых проектов, где часть контента теряет актуальность с течением времени.

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

Ручное удаление устаревших записей – трудоемкий и ошибкоопасный процесс. Автоматизация позволяет:

  • Сэкономить время администратора;
  • Поддерживать базу данных в оптимальном состоянии;
  • Избежать засорения сайта неактуальной информацией;
  • Повысить скорость работы сайта и упростить администрирование.

Особенно это актуально для сайтов с большими объемами данных и не только для стандартных записей (posts), но и для кастомных типов записей, таких как события, объявления, товары и т.д.

Как работает автоматическое удаление по типу записи и дате

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

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

Основные шаги решения:

  1. Создаем функцию, которая выполняет поиск старых записей по типу и дате.
  2. Удаляем найденные записи с помощью wp_delete_post() с параметром $force_delete = true, чтобы миновать корзину, если нужно.
  3. Регистрируем хук для запуска этой функции по расписанию WP-Cron.
  4. Добавляем активацию и деактивацию расписания при включении и выключении плагина или темы.

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

Рассмотрим пример, где мы хотим автоматически удалять записи типа event, старше 90 дней.

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

    $args = [
        'post_type' => 'event',
        'post_status' => 'publish',
        'date_query' => [
            [
                'before' => $date_threshold,
                'inclusive' => true,
            ],
        ],
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];

    $old_events = get_posts($args);

    if (!empty($old_events)) {
        foreach ($old_events as $post_id) {
            wp_delete_post($post_id, true); // true - удаляем без корзины
        }
    }
}

// Регистрируем задачу в WP-Cron
function wpreset_schedule_old_events_cleanup() {
    if (!wp_next_scheduled('wpreset_old_events_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wpreset_old_events_cleanup_hook');
    }
}
add_action('wp', 'wpreset_schedule_old_events_cleanup');

// Привязываем функцию к событию
add_action('wpreset_old_events_cleanup_hook', 'wpreset_delete_old_events');

// Очищаем расписание при деактивации
function wpreset_deactivate_cleanup() {
    $timestamp = wp_next_scheduled('wpreset_old_events_cleanup_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpreset_old_events_cleanup_hook');
    }
}
register_deactivation_hook(__FILE__, 'wpreset_deactivate_cleanup');

Подробное объяснение кода и настройка

Функция удаления записей

Функция wpreset_delete_old_events() формирует запрос с помощью get_posts(), где ищет все записи типа event с датой публикации старше 90 дней. Получает только ID записей для оптимизации.

Далее в цикле удаляет каждую запись через wp_delete_post() с параметром true, чтобы сразу удалять без помещения в корзину. Это гарантирует, что записи не останутся в базе.

Настройка WP-Cron

Функция wpreset_schedule_old_events_cleanup() проверяет, назначена ли уже задача на ежедневный запуск. Если нет — создает событие, которое выполняется раз в сутки.

Далее через add_action() привязывается наша функция удаления к этому событию.

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

Удаление расписания при деактивации

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

Как расширить или адаптировать решение под свои задачи

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

Для более сложных условий можно добавить дополнительные параметры в запрос $args, например, фильтр по таксономиям, мета-полям или статусам.

Если нужно не удалять записи безвозвратно, а только перемещать их в черновики или в корзину, измените параметр wp_delete_post($post_id, true) на false или вместо удаления использовать функцию wp_update_post() для смены статуса.

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

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

Если на сайте очень много записей, стоит ограничить количество удаляемых записей за один запуск, чтобы избежать перегрузки сервера. Для этого в параметре posts_per_page можно указать, например, 100, и запускать задачу чаще (каждые несколько часов).

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

Другие плагины и инструменты для автоматизации очистки контента

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

  • WPReset — подходит для быстрой очистки сайта и восстановления после тестов, но не автоматизирует удаление контента по срокам.
  • Clearfy Pro — расширяет возможности по оптимизации сайта, в том числе автоматизацию задач и очистку базы.
  • Advanced Database Cleaner — помогает очищать базу от мусора, включая автоматизацию.

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

Как автоматически удалять старые записи в WordPress через шорткод
11.04.2026
Как использовать WPReset для быстрого восстановления сайта после обновлений
05.01.2026
Как удалить все записи WordPress одной кнопкой
09.12.2025
Как избежать ошибки 503 в WordPress после обновления
30.03.2026
Как автоматизировать удаление старого контента в WordPress по типу записи
15.04.2026