Как создать автоматическое удаление старого контента в 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 для оптимизации базы данных
06.01.2026
Как избежать ошибок при массовом изменении статусов заказов WooCommerce
23.06.2026
Как автоматически удалить товар из заказов WooCommerce после отмены или возврата
18.04.2026
Как создать собственный шорткод в WordPress с примером кода
13.11.2025
Как использовать хук WooCommerce для обновления мета данных заказа на этапе оформления
07.05.2026