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

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

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

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

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

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

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

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

Плагин WP Auto Delete Posts

WP Auto Delete Posts — простой и гибкий плагин для удаления постов по времени жизни. Он позволяет указать срок хранения записи и настроить удаление по типу поста и статусу.

Преимущества:

  • Удаление по дате публикации (например, старше 30 дней);
  • Фильтрация по типу и статусу постов;
  • Работа по cron-заданиям.

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

Плагин Advanced Post Manager

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

Для настройки достаточно задать необходимые фильтры и запустить задачу удаления.

Пример автоматического удаления старых постов с помощью собственного кода

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

Регистрация cron задачи

function wpmeta_cron_activation() {
    if (!wp_next_scheduled('wpmeta_delete_old_posts_hook')) {
        wp_schedule_event(time(), 'daily', 'wpmeta_delete_old_posts_hook');
    }
}
register_activation_hook(__FILE__, 'wpmeta_cron_activation');

function wpmeta_cron_deactivation() {
    wp_clear_scheduled_hook('wpmeta_delete_old_posts_hook');
}
register_deactivation_hook(__FILE__, 'wpmeta_cron_deactivation');

Этот код регистрирует ежедневное событие для удаления постов.

Функция удаления постов по условию

function wpmeta_delete_old_posts() {
    $args = [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => [
            [
                'before' => '30 days ago',
            ],
        ],
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ];

    $old_posts = get_posts($args);

    foreach ($old_posts as $post_id) {
        wp_delete_post($post_id, true); // true - удаление без корзины
    }
}
add_action('wpmeta_delete_old_posts_hook', 'wpmeta_delete_old_posts');

Этот код удалит все опубликованные записи старше 30 дней без помещения их в корзину.

Добавление фильтра по категории и пользовательскому метаполю

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

$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'date_query'     => [
        [
            'before' => '30 days ago',
        ],
    ],
    'category_name'  => 'news', // категория 'news'
    'meta_query'     => [
        [
            'key'     => '_wpmeta_delete_flag',
            'value'   => '1',
            'compare' => '=',
        ],
    ],
    'posts_per_page' => -1,
    'fields'         => 'ids',
];

Так вы удалите только записи категории news, которые имеют пользовательское поле _wpmeta_delete_flag со значением 1.

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

При автоматическом удалении важно соблюдать осторожность, чтобы не потерять нужный контент. Вот несколько рекомендаций:

  • Обязательно делайте резервные копии базы данных перед настройкой автоматического удаления.
  • Тестируйте код или плагин на тестовом сайте, чтобы убедиться, что удаляются только нужные записи.
  • Используйте параметр wp_delete_post($post_id, false), чтобы сначала переместить посты в корзину и иметь возможность восстановить.
  • Ведите журнал удалений для контроля и аудита.
  • Если хотите, можно дополнительно отправлять уведомления администратору о выполнении удаления.

Интеграция с плагином Clearfy Pro для оптимизации

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

Выводы

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

Как использовать WPRemark для оптимизации комментариев в WordPress
19.02.2026
Как автоматизировать удаление постов в WordPress по срокам
19.03.2026
Как удалить версию WordPress из header и footer: защита сайта от уязвимостей
16.11.2025
Как разрешить отображение WooCommerce атрибутов в фильтрах и на страницах каталога
26.04.2026
Как создать автоматический вывод оценок на основе WPMeta в WordPress
13.03.2026

Совсем скоро здесь откроется ресурс о вордпресс.