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

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

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

Кроме того, удаление устаревших записей способствует улучшению SEO, так как поисковые системы оценивают качество и актуальность контента. Удаляя нерелевантные статьи, вы повышаете общий уровень сайта и облегчаете навигацию для пользователей.

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

Использование встроенного планировщика задач WordPress (WP-Cron) для удаления постов

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

Ниже пример функции и регистрации события в WP-Cron для удаления постов старше 180 дней:

function wpdirect_delete_old_posts() {
    global $wpdb;
    $days = 180; // удалять посты старше 180 дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $posts = get_posts(array(
        'date_query' => array(
            array(
                'before' => $date,
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    ));

    if (!empty($posts)) {
        foreach ($posts as $post_id) {
            wp_delete_post($post_id, true); // true - удаление без возможности восстановления
        }
    }
}

if (!wp_next_scheduled('wpdirect_daily_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpdirect_daily_delete_old_posts');
}
add_action('wpdirect_daily_delete_old_posts', 'wpdirect_delete_old_posts');

Этот код можно добавить в файл functions.php вашей темы или в собственный плагин. Он будет запускать функцию удаления ежедневно. Важно учитывать, что WP-Cron срабатывает при посещении сайта, поэтому если трафик низкий, задача может запускаться с задержкой.

Настройка параметров удаления

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

function wpdirect_delete_old_posts() {
    $days = 180;
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'date_query' => array(
            array('before' => $date, 'inclusive' => true),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
        'category__not_in' => array(1, 5), // исключаем категории с ID 1 и 5
    );

    $posts = get_posts($args);

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

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

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

1. WP Auto Delete Posts

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

Скачать и узнать больше можно на wpshop.ru.

2. Post Expirator

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

Плагин подходит, если нужно гибко управлять сроками жизни отдельных постов, а не только всех разом. Подробнее и скачать — wpshop.ru.

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

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

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

Пример расширения для уведомления об удалённых постах

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

function wpdirect_delete_old_posts_notify() {
    $days = 180;
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'date_query' => array(array('before' => $date, 'inclusive' => true)),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $posts = get_posts($args);
    $deleted_titles = array();

    foreach ($posts as $post_id) {
        $title = get_the_title($post_id);
        wp_delete_post($post_id, true);
        $deleted_titles[] = $title;
    }

    if (!empty($deleted_titles)) {
        $to = get_option('admin_email');
        $subject = 'Автоматическое удаление старых постов на сайте';
        $message = "Удалены следующие посты, старше {$days} дней:\n" . implode("\n", $deleted_titles);
        wp_mail($to, $subject, $message);
    }
}

if (!wp_next_scheduled('wpdirect_daily_delete_old_posts_notify')) {
    wp_schedule_event(time(), 'daily', 'wpdirect_daily_delete_old_posts_notify');
}
add_action('wpdirect_daily_delete_old_posts_notify', 'wpdirect_delete_old_posts_notify');

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

Заключение по теме

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

WooCommerce: не отображаются страницы товаров и категорий — диагностика и решение
04.05.2026
Как создать собственный виджет WordPress
28.11.2025
Использование Transient API для кэширования данных в WordPress
09.04.2026
Как создать автоматические заголовки для постов в WordPress
22.12.2025
WooCommerce: почему не отображаются страницы товаров и категорий и как исправить
14.05.2026