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

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

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

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

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

Рассмотрим, как реализовать автоматическое удаление старых записей в WordPress с помощью пользовательского кода и плагинов.

Как автоматически удалять записи по дате с помощью WPSource_cron_delete_old_posts

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

function wpsource_cron_delete_old_posts() {
    $days = 30; // Удалять записи старше 30 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
                '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); // Принудительно удалить
        }
    }
}

add_action('wpsource_cron_delete_hook', 'wpsource_cron_delete_old_posts');

// Регистрируем событие cron раз в сутки
if (!wp_next_scheduled('wpsource_cron_delete_hook')) {
    wp_schedule_event(time(), 'daily', 'wpsource_cron_delete_hook');
}

Этот код создаёт ежедневное событие, которое удаляет все записи старше 30 дней. Вы можете изменить количество дней в переменной $days.

Как подключить код

Добавьте этот код в functions.php вашей активной темы или создайте собственный плагин. После этого WordPress автоматически будет запускать функцию каждый день.

Фильтрация по категории: удаляем старые записи из определённых категорий

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

function wpsource_cron_delete_old_posts_by_category() {
    $days = 60;
    $category = 'news'; // Имя категории
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'category_name' => $category,
        'date_query' => array(
            array(
                'before' => $date_threshold,
                '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);
        }
    }
}

add_action('wpsource_cron_delete_category_hook', 'wpsource_cron_delete_old_posts_by_category');

if (!wp_next_scheduled('wpsource_cron_delete_category_hook')) {
    wp_schedule_event(time(), 'daily', 'wpsource_cron_delete_category_hook');
}

Теперь будут удаляться только записи из категории news, которым больше 60 дней. Можно указать несколько категорий через запятую в параметре category_name.

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

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

  • Auto Delete Posts — простой плагин для удаления записей старше заданного возраста. Можно фильтровать по типам записей и категориям.
  • WP Clear Old Posts — позволяет настроить расписание и условия удаления, включая метки и категории.

Для установки плагина:

  1. Перейдите в админку WordPress — Плагины — Добавить новый.
  2. Введите название плагина в поиск и установите его.
  3. Активируйте и настройте параметры удаления в разделе настроек плагина.

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

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

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

Рекомендуется использовать плагин UpdraftPlus или встроенные средства хостинга для автоматического бэкапа.

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

function wpsource_log_deleted_post($post_id) {
    error_log('Deleted post ID: ' . $post_id);
}

// Вызов внутри цикла удаления
// wpsource_log_deleted_post($post_id);

Выводы и рекомендации по внедрению

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

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

Для дополнительной оптимизации и контроля рекомендуем ознакомиться с инструментами из WPShop.

WooCommerce: решение проблем с оплатой через разные платёжные системы
21.05.2026
Как запретить роботам индексировать страницы архива в WordPress
20.02.2026
Как удалить автоматические дубли страниц в WordPress
30.03.2026
Как создать собственную настройку для темы WordPress в админке
25.11.2025
Как добавить поддержку PHP в визуальный редактор WordPress
11.03.2026