Автоматическое удаление старого контента в WordPress по типу постов и дате

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

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

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

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

Автоматизация этого процесса особенно важна для крупных сайтов и проектов с большим объёмом контента.

Настройка автоматического удаления постов по дате и типу с помощью кастомного кода

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

Создание функции удаления старых постов

function wptool_delete_old_posts() {
    // Задаём типы постов для удаления
    $post_types = array('post', 'custom_post_type');
    // Задаём возраст поста в днях
    $days = 180;

    $args = array(
        'post_type'      => $post_types,
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before'    => date('Y-m-d', strtotime('-' . $days . ' days')),
                'inclusive' => true,
            ),
        ),
        '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 всех публикаций, которые старше 180 дней, и удаляем их принудительно.

Добавление задачи в WP-Cron для регулярного запуска

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

add_action('wptool_daily_delete_old_posts', 'wptool_delete_old_posts');

Этот код создаёт ежедневное задание, которое будет запускать функцию удаления.

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

Часто нужно удалять не просто старый контент, а, например, только записи определённой категории или метки. Для этого расширим запрос:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'category',
        'field'    => 'slug',
        'terms'    => array('old-content', 'archive'),
        'operator' => 'IN',
    ),
);

Так можно гибко настраивать критерии удаления.

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

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

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

Оба плагина поддерживают запланированное удаление и позволяют избежать лишних действий вручную.

Рекомендации по безопасности и резервному копированию перед автоматическим удалением

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

  • Настройте регулярное резервное копирование сайта и базы данных.
  • Тестируйте функцию удаления на тестовом сайте.
  • Включите логирование удалённых записей для контроля.

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

Пример расширения функции: логирование удалённых постов

function wptool_delete_old_posts() {
    $post_types = array('post', 'custom_post_type');
    $days = 180;

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

    $old_posts = get_posts($args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            $post_title = get_the_title($post_id);
            $post_date = get_the_date('Y-m-d', $post_id);
            if (wp_delete_post($post_id, true)) {
                error_log("[wptool] Удалён пост ID: $post_id, Заголовок: $post_title, Дата: $post_date");
            }
        }
    }
}

Так вы будете видеть в логе, какие записи были удалены и когда.

Итоги и практические советы

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

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

Как добавить поддержку WebP в WordPress без плагинов
20.03.2026
Как автоматизировать создание копий публикаций в WordPress с помощью кода
24.12.2025
Автоматический импорт продуктов WooCommerce из CSV с примерами кода
04.02.2026
Как установить ограничение на число товаров в корзине WooCommerce
29.05.2026
WooCommerce: автоматическое изменение стоимости товара при изменении атрибутов
16.07.2026