Как автоматически удалять старый контент в 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.

Как использовать WPReset для автоматического восстановления WordPress после ошибок
23.12.2025
Как использовать хуки WordPress для автоматизации задач
11.11.2025
Как удалить или отключить плагин WordPress без доступа к админке
13.01.2026
Как настроить автоматическое создание резервных копий в WordPress с WPReset
29.01.2026
Как автоматизировать удаление заблокированных пользователей в WordPress
18.04.2026