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

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

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

Удаление устаревшего контента помогает поддерживать сайт в актуальном и оптимальном состоянии, что положительно влияет на несколько важных аспектов:

  • Производительность: уменьшение количества записей снижает нагрузку на базу данных и ускоряет время отклика сайта.
  • SEO: поисковые системы чаще индексируют актуальный контент, удаление мусора помогает избежать дублирования и понижения рейтинга.
  • Удобство управления: администратору проще работать с базой, когда нет «мусорных» записей.

Автоматизация этого процесса экономит время и предотвращает накопление ненужных данных.

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

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

1. WP Reset и его возможности

Хотя WP Reset в первую очередь предназначен для сброса сайта, в версии Pro есть возможности для создания точек восстановления и управления данными, которые можно использовать для очистки ненужного контента.

Подробнее о WP Reset можно узнать здесь.

2. Плагин Auto Delete Posts

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

3. Плагин Post Expirator

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

Самостоятельная реализация автоматического удаления старого контента через WP-Cron

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

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

function wpreset_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => date('Y-m-d', strtotime('-180 days')),
                '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_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpreset_daily_delete_old_posts');
}

// Запускаем функцию по крону
add_action('wpreset_daily_delete_old_posts', 'wpreset_delete_old_posts');

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

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

Часто на сайтах есть кастомные типы записей (Custom Post Types), например, «события» или «продукты». Их тоже можно удалить по аналогичной схеме.

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

function wpreset_delete_old_events() {
    $args = array(
        'date_query' => array(
            array(
                'before' => date('Y-m-d', strtotime('-90 days')),
                'inclusive' => true,
            ),
        ),
        'post_type' => 'event', // ваш кастомный тип записи
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $old_events = get_posts($args);

    if (!empty($old_events)) {
        foreach ($old_events as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}

// Добавьте вызов в WP-Cron, аналогично примеру выше

Также можно фильтровать записи по метаданным — например, удалять посты с определённым статусом в кастомном поле.

Практические советы по безопасности и тестированию

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

  • Резервные копии: перед включением автоматического удаления убедитесь, что настроено регулярное резервное копирование сайта. Для этого подойдет плагин WPReset с функцией создания снимков — подробнее.
  • Тестирование: сначала запускайте скрипты удаления на тестовом сайте, чтобы убедиться, что удаляются только нужные записи.
  • Логирование: добавьте логирование удаляемых ID записей, чтобы можно было проверить, что именно было удалено.

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

function wpreset_delete_old_posts_with_log() {
    $args = array(
        'date_query' => array(
            array(
                'before' => date('Y-m-d', strtotime('-180 days')),
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);
    $deleted_posts = array();

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            if (wp_delete_post($post_id, true)) {
                $deleted_posts[] = $post_id;
            }
        }
    }

    if (!empty($deleted_posts)) {
        error_log('WPReset удалённые посты: ' . implode(", ", $deleted_posts));
    }
}

Логи можно просматривать в файле wp-content/debug.log, если включен режим отладки.

Заключение

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

Как использовать REST API WordPress для автоматизации и расширения функционала
13.12.2025
Как отключить и удалить редактор Gutenberg в WordPress без потери данных
07.05.2026
Как использовать WPReset для автоматического отката изменений в WordPress
05.02.2026
Как установить и настроить WooCommerce для массового экспорта и импорта товаров
31.05.2026
Как создать свой шорткод в WordPress с примерами кода
17.11.2025