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

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

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

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

Кроме того, регулярная очистка помогает избежать проблем с безопасностью, если в старом контенте остались уязвимости или устаревшие скрипты.

Наконец, автоматизация этого процесса экономит время и снижает вероятность человеческой ошибки.

Как работает удаление контента по дате в WordPress

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

Для реализации нам понадобится создать функцию, которая будет запускаться по расписанию (например, раз в день) и удалять записи, опубликованные раньше установленного срока.

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

Пример кода, который можно добавить в файл functions.php вашей темы или в отдельный плагин:

function wplessons_delete_old_posts() {
    // Количество дней, после которых записи считаются устаревшими
    $days_old = 90;

    // Дата отсечения
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    // Получаем все публикации старше порога
    $old_posts = get_posts(array(
        'date_query' => array(
            array(
                'before' => $date_threshold,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'numberposts' => -1,
        'fields' => 'ids',
    ));

    foreach ($old_posts as $post_id) {
        // Удаляем запись без возможности восстановления
        wp_delete_post($post_id, true);
    }
}

Эта функция найдет все опубликованные записи старше 90 дней и удалит их полностью.

Настраиваем автоматический запуск с помощью WP-Cron

Чтобы функция запускалась регулярно, нужно добавить событие в WP-Cron:

// Регистрируем событие при активации темы или плагина
function wplessons_schedule_old_posts_deletion() {
    if (!wp_next_scheduled('wplessons_delete_old_posts_hook')) {
        wp_schedule_event(time(), 'daily', 'wplessons_delete_old_posts_hook');
    }
}
add_action('wp', 'wplessons_schedule_old_posts_deletion');

// Хук для запуска функции
add_action('wplessons_delete_old_posts_hook', 'wplessons_delete_old_posts');

// Удаляем расписание при деактивации
function wplessons_unschedule_old_posts_deletion() {
    $timestamp = wp_next_scheduled('wplessons_delete_old_posts_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wplessons_delete_old_posts_hook');
    }
}

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

Как расширить функциональность: удаление по пользовательским типам записей и категориям

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

Удаление старых пользовательских типов записей

В параметре post_type функции get_posts можно указать массив типов:

$old_custom_posts = get_posts(array(
    'date_query' => array(
        array(
            'before' => $date_threshold,
        ),
    ),
    'post_type' => array('post', 'your_custom_post_type'),
    'post_status' => 'publish',
    'numberposts' => -1,
    'fields' => 'ids',
));

Далее удаление происходит по тому же принципу.

Удаление записей из определенной категории

Чтобы фильтровать по категориям, используйте параметр tax_query:

$old_posts_cat = get_posts(array(
    'date_query' => array(
        array(
            'before' => $date_threshold,
        ),
    ),
    'category_name' => 'news', // или 'cat' => ID категории
    'post_status' => 'publish',
    'numberposts' => -1,
    'fields' => 'ids',
));

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

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

Если вы предпочитаете готовые решения, обратите внимание на плагины, которые упрощают работу с автоматической очисткой:

  • Clearfy Pro — мощный набор инструментов для оптимизации и очистки WordPress. Поддерживает автоматическое удаление устаревших ревизий, мусора и постов по расписанию. Подробнее: https://wpshop.ru/plugins/clearfy-pro/
  • WPRemark — плагин для управления комментариями и спамом, умеет автоматически удалять старые комментарии и записи.

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

Практические рекомендации и меры предосторожности

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

Также рекомендуем создавать логи работы скрипта — например, записывать в файл или базу, какие записи были удалены и когда. Это поможет контролировать процесс и анализировать результаты.

Если у вас большой сайт с тысячами записей, не удаляйте все сразу — лучше разбивать процесс на партии по 50-100 записей, чтобы избежать перегрузки сервера. Для этого используйте параметры posts_per_page и циклы обработки.

Заключение

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

Как изменить размер и форму аватара в WordPress с примерами кода
26.01.2026
Как создать пользовательские роли в WordPress с примером кода
03.12.2025
Как избежать проблем при использовании PHP 8 в WordPress
12.02.2026
Как использовать REST API для создания нестандартных эндпоинтов в WordPress
22.12.2025
Как автоматически удалять старые неиспользуемые изображения в медиабиблиотеке WordPress
09.03.2026