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

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

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

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

  • Оптимизация базы данных: чем меньше записей, тем быстрее работают запросы и меньше нагрузка на сервер.
  • Актуальность контента: посетители видят только свежие и важные материалы.
  • SEO-выгода: поисковые системы положительно оценивают сайты с качественным и релевантным контентом.

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

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

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

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

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

function wpnews_delete_old_posts() {
    $days = 180; // удалять записи старше 180 дней
    $date_query = array(
        'before' => date('Y-m-d', strtotime("-{$days} days"))
    );

    $old_posts = get_posts(array(
        'post_type' => 'post',
        'date_query' => array($date_query),
        'posts_per_page' => -1,
        'fields' => 'ids',
        'post_status' => 'publish'
    ));

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

// Регистрация задачи в WP-Cron
if (!wp_next_scheduled('wpnews_daily_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpnews_daily_delete_old_posts');
}
add_action('wpnews_daily_delete_old_posts', 'wpnews_delete_old_posts');

Этот код ежедневно запускает функцию wpnews_delete_old_posts, которая удаляет все опубликованные новости старше 180 дней.

Объяснение работы кода

  • Используем get_posts с параметром date_query, чтобы получить ID записей, опубликованных до даты, которая на 180 дней раньше сегодняшнего дня.
  • Удаляем каждую запись с помощью wp_delete_post с параметром true для полного удаления без перемещения в корзину.
  • Задача регистрируется в WP-Cron с ежедневным интервалом.

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

Для контроля работы скрипта можно добавить логирование:

function wpnews_delete_old_posts() {
    $days = 180;
    $date_query = array('before' => date('Y-m-d', strtotime("-{$days} days")));
    $old_posts = get_posts(array(
        'post_type' => 'post',
        'date_query' => array($date_query),
        'posts_per_page' => -1,
        'fields' => 'ids',
        'post_status' => 'publish'
    ));

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            $deleted = wp_delete_post($post_id, true);
            if ($deleted) {
                error_log("[wpnews] Удалена новость с ID: $post_id");
            } else {
                error_log("[wpnews] Ошибка при удалении новости с ID: $post_id");
            }
        }
    } else {
        error_log('[wpnews] Нет новостей для удаления');
    }
}

Логи будут сохраняться в файл wp-content/debug.log при включённом режиме отладки WordPress (WP_DEBUG и WP_DEBUG_LOG).

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

Если вы предпочитаете готовые решения, можно использовать плагины:

  • Auto Delete Posts — позволяет настроить удаление записей по возрасту, категории и другим параметрам.
  • Post Expirator — устанавливает дату окончания публикации записи и автоматически архивирует или удаляет её.

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

Советы по безопасности и резервному копированию

Перед автоматическим удалением рекомендуем:

  • Создавать резервные копии базы данных и файлов сайта, например, с помощью плагинов WPBackup или Clearfy Pro.
  • Тестировать код на тестовом окружении перед применением на живом сайте.
  • Временно включать логирование для отслеживания процесса удаления.

Расширение функционала: удаление только из выбранной категории

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

function wpnews_delete_old_posts_in_category() {
    $days = 180;
    $category_slug = 'archive';

    $date_query = array('before' => date('Y-m-d', strtotime("-{$days} days")));

    $old_posts = get_posts(array(
        'post_type' => 'post',
        'category_name' => $category_slug,
        'date_query' => array($date_query),
        'posts_per_page' => -1,
        'fields' => 'ids',
        'post_status' => 'publish'
    ));

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

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

Итоги

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

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

Как автоматизировать создание и публикацию новостей в WordPress
26.03.2026
Как использовать REST API для автоматического обновления новостей в WordPress
23.03.2026
Как удалить неактивные товары WooCommerce с помощью кода
10.05.2026
Как запретить регистрацию пользователей в WordPress с помощью кода и плагинов
10.12.2025
Как установить и настроить WP GraphQL в WordPress для расширенного API
17.02.2026