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

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

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

Со временем на сайте накапливается много записей, которые теряют актуальность. Это могут быть новости, акции, временные страницы и пр. Удаление таких материалов помогает:

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

Особенно это важно для новостных сайтов и блогов с большим количеством постов.

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

WordPress имеет встроенную систему планировщика заданий — WP-Cron. С её помощью можно запускать задачи по расписанию. Создадим задачу, которая будет удалять записи старше определённого возраста.

Создание функции удаления старого контента

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpcommunity_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '1 year ago', // Удалить записи старше 1 года
                '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 — удаляет без перемещения в корзину
        }
    }
}

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

Регистрация регулярного события WP-Cron

Далее нужно зарегистрировать задачу, которая будет запускать эту функцию. Добавьте в тот же файл:

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

add_action('wpcommunity_delete_old_posts_event', 'wpcommunity_delete_old_posts');

Этот код запустит функцию удаления раз в сутки. Вы можете изменить интервал на 'hourly' или 'weekly'.

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

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

  • Auto Delete Posts — позволяет настроить автоудаление постов по дате публикации, категории, тегам и другим параметрам.
  • WP Bulk Delete — мощный инструмент для массового удаления постов, страниц, пользовательских типов и метаданных с гибкими фильтрами.
  • Simple Post Expiration — добавляет возможность установить дату истечения для постов, после которой они будут автоматически удалены или переведены в черновики.

Все эти плагины можно найти в репозитории WordPress. Для установки зайдите в админ-панель → Плагины → Добавить новый и введите название плагина.

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

После установки и активации перейдите в меню WP Bulk Delete. В разделе «Delete Posts» выберите условия фильтрации:

  • Публикация старше 6 месяцев
  • Опубликованные записи
  • Категории или теги (если хотите ограничить удаление)

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

Особенности и рекомендации

Резервное копирование перед удалением

Удаление — необратимая операция (особенно при wp_delete_post($id, true)). Обязательно делайте резервные копии базы данных перед запуском автоматики. Для этого можно использовать плагин Clearfy Pro — он умеет создавать бэкапы и оптимизировать базу.

Логирование удалений

Чтобы контролировать процесс, добавьте логирование. Например, модифицируйте функцию удаления так:

function wpcommunity_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array('before' => '1 year 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) {
            if (wp_delete_post($post_id, true)) {
                error_log("[WPCommunity] Deleted post ID: " . $post_id);
            }
        }
    }
}

Логи можно просматривать в файле debug.log, если включён WP_DEBUG_LOG.

Удаление не только постов, но и других типов контента

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

$args = array(
    'post_type' => array('post', 'event', 'review'),
    // остальные параметры
);

Так вы сможете удалять устаревший контент любых типов.

Заключение

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

Удаление пустых записей в termmeta WordPress: оптимизация базы данных
09.12.2025
Как установить ограничения на регистрацию в WordPress по домену e-mail
30.01.2026
Как отключить AJAX в Gravity Forms и использовать собственный AJAX-обработчик в WordPress
13.02.2026
Как отфильтровать и удалить спам-комментарии по IP в WordPress
05.03.2026
Как создать свою систему ролей и разрешений в WordPress
30.11.2025

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: