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

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

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

Если в вашем блоге или новостном сайте есть категория или метка для чрезвычайных сообщений, которые актуальны, например, 3-7 дней, то по истечении этого времени их не нужно просто скрывать — лучше удалять или архивировать. Это позволяет поддерживать чистоту базы данных, улучшить скорость работы сайта и избежать путаницы среди пользователей.

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

Как определить «чрезвычайный» пост для автодеалета

Для начала нужно однозначно помечать такие посты. Обычно используют:

  • Специальную категорию, например, «Чрезвычайные»
  • Метки (теги) — например, emergency
  • Кастомное поле (мета-данные), например, emergency_event со значением 1

Выбор зависит от структуры сайта и удобства. В нашем примере будем считать, что чрезвычайные посты имеют метку emergency.

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

Самый простой способ — создать планировщик задач, который будет запускаться, например, раз в сутки и удалять посты старше N дней с меткой emergency.

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

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

    $query = new WP_Query([
        'post_type'      => 'post',
        'posts_per_page' => -1,
        'tag'            => 'emergency',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => $date_threshold,
            ],
        ],
        'fields'         => 'ids',
        'post_status'    => 'publish',
    ]);

    if (!empty($query->posts)) {
        foreach ($query->posts as $post_id) {
            wp_delete_post($post_id, true); // true — удалить без перехода в корзину
        }
    }
}

Регистрация планировщика WP Cron

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

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

add_action('wp3ru_emergency_cleanup_event', 'wp3ru_delete_old_emergency_posts');

Эти фрагменты кода нужно добавить в файл functions.php вашей темы или в отдельный плагин.

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

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

Плагин WP Bulk Delete

WP Bulk Delete — мощный плагин для массового удаления постов с фильтрами по таксономиям, датам и мета-полям. Он позволяет настроить расписание удаления.

  • Переходим в настройки плагина.
  • Выбираем удаление по метке emergency.
  • Указываем условие "старше 7 дней".
  • Включаем расписание (например, ежедневно).

Подробнее и загрузка: https://wordpress.org/plugins/wp-bulk-delete/

Плагин Clearfy Pro для оптимизации и автоматизации

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

Подробнее о Clearfy Pro: wpshop.ru/clearfy-pro

Дополнительные советы по безопасности и производительности

Удаление постов — операция необратимая, особенно с параметром wp_delete_post($post_id, true). Рекомендуется перед автоматическим удалением:

  • Настроить резервное копирование сайта (например, с помощью плагина UpdraftPlus).
  • Периодически проверять логи выполнения WP Cron и корректность удаления.
  • Тестировать функцию на тестовом сайте перед запуском в продакшн.

Также учитывайте нагрузку: если у вас очень много чрезвычайных постов, лучше делать удаление порциями, например, по 20-50 записей за один запуск.

Как расширить функциональность: переводить старые чрезвычайные посты в статус черновика или архивировать

Если удаление категорически нежелательно, можно вместо удаления менять статус поста на draft или перемещать в другую категорию, например, «Архив чрезвычайных». Это позволит сохранить данные, но скрыть их с фронтенда.

Пример изменения статуса вместо удаления:

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

    $query = new WP_Query([
        'post_type'      => 'post',
        'posts_per_page' => -1,
        'tag'            => 'emergency',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => $date_threshold,
            ],
        ],
        'post_status'    => 'publish',
    ]);

    if (!empty($query->posts)) {
        foreach ($query->posts as $post_id) {
            wp_update_post([
                'ID'          => $post_id,
                'post_status' => 'draft',
            ]);
        }
    }
}

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

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

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

Как удалить или скрыть класс CSS в WooCommerce корзине
19.12.2025
Как автоматизировать удаление старых чрезвычайных постов в WordPress
06.04.2026
Как создать свой виджет в WordPress с примерами кода
04.12.2025
Как использовать WP-Cron для автоматического удаления старого контента в WordPress
07.05.2026
Как использовать WPGPT для автоматического создания контента в WordPress
29.03.2026