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

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

Зачем нужно автоматически удалять старый контент в WordPress

Со временем на сайте накапливается много устаревших записей — новости, акции, временные объявления. Если не удалять их, это:

  • Замедляет работу сайта из-за увеличения объема базы данных.
  • Ухудшает пользовательский опыт, так как посетители видят неактуальную информацию.
  • Увеличивает затраты на резервное копирование и обслуживание.

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

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

Для небольших сайтов можно вручную удалить контент по дате через админку:

  1. Перейдите в раздел «Записи» или «Страницы».
  2. Отфильтруйте записи по дате публикации.
  3. Выберите записи и нажмите «Удалить».

Этот способ неудобен для большого количества записей и требует регулярного внимания.

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

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

Пример функции удаления записей старше 180 дней

function wpreset_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '180 days ago',
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        '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 — удалить без возможности восстановления
        }
    }
}

// Планируем запуск функции раз в сутки
if (!wp_next_scheduled('wpreset_daily_old_post_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpreset_daily_old_post_cleanup');
}
add_action('wpreset_daily_old_post_cleanup', 'wpreset_delete_old_posts');

Объяснение:

  • Функция wpreset_delete_old_posts ищет все опубликованные записи старше 180 дней.
  • Используется get_posts с параметром date_query.
  • Все найденные записи удаляются без помещения в корзину.
  • Задача планируется с помощью WP-Cron и запускается ежедневно.

Дополнительные фильтры для удаления контента

Вы можете настроить удаление по другим критериям, например:

Удаление по категории

function wpreset_delete_old_category_posts($category_slug) {
    $args = array(
        'category_name' => $category_slug,
        'date_query' => array(
            array('before' => '90 days ago'),
        ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $posts = get_posts($args);

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

Вызывайте эту функцию с нужным слагом категории, например wpreset_delete_old_category_posts('news');.

Удаление постов по пользовательскому типу записи

function wpreset_delete_old_custom_post_type($post_type, $days) {
    $args = array(
        'post_type' => $post_type,
        'date_query' => array(
            array('before' => "$days days ago"),
        ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $posts = get_posts($args);

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

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

Если не хотите писать код, можно воспользоваться плагинами с похожим функционалом.

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

  • Auto Delete Posts — позволяет создать правила удаления старых записей по дате и категории.
  • Bulk Delete — продвинутый инструмент для массового удаления постов по разным условиям, включая пользовательские поля и таксономии.
  • WPReset — в основном для восстановления сайта, но в связке с WP-Cron помогает автоматизировать очистку.

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

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

Удаление записей — необратимая операция при wp_delete_post($id, true). Чтобы избежать потери важных данных:

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

Пример расширения функции с уведомлением и логированием

function wpreset_delete_old_posts_with_log() {
    $args = array(
        'date_query' => array(
            array('before' => '180 days ago'),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);
    $deleted_count = 0;

    foreach ($old_posts as $post_id) {
        if (wp_delete_post($post_id, true)) {
            $deleted_count++;
        }
    }

    if ($deleted_count > 0) {
        $admin_email = get_option('admin_email');
        wp_mail($admin_email, 'Отчёт об удалении старого контента', "Удалено записей: $deleted_count");
    }
}

add_action('wpreset_daily_old_post_cleanup', 'wpreset_delete_old_posts_with_log');

Так вы будете всегда в курсе, как работает автоматическая очистка.

Заключение

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

Как устранить ошибку 429 Too Many Requests в WordPress
13.03.2026
Как создать и использовать собственные REST API эндпоинты в WordPress
03.04.2026
Как создать и использовать собственные типы записей (Custom Post Types) в WordPress
22.11.2025
Как удалить все записи WordPress одной кнопкой
09.12.2025
Как удалить все плагины WordPress одним кликом
26.01.2026