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

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

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

Удаление устаревшего контента помогает:

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

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

Как автоматически удалять старые записи с помощью WP-Cron

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

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

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

function wpbloger_delete_old_posts() {
    $days = 180; // количество дней, старше которых посты будут удалены
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'date_query' => array(
            array(
                'before' => $date,
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        '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 - удаляет безвозвратно
        }
    }
}

Функция wpbloger_delete_old_posts выберет все опубликованные записи старше 180 дней и удалит их без возможности восстановления.

Регистрация задачи в WP-Cron

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

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

add_action('wpbloger_daily_old_posts_deletion', 'wpbloger_delete_old_posts');

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

Как контролировать и настраивать процесс удаления

Если вы хотите изменить период удаления, просто замените значение переменной $days в функции на нужное количество дней. Например, для удаления записей старше 90 дней — $days = 90;.

Для безопасности можно изменить удаление на перемещение в корзину, заменив вызов wp_delete_post($post_id, true); на wp_trash_post($post_id);. Тогда записи можно будет восстановить из корзины.

Отслеживание результатов удаления

Чтобы отслеживать, сколько записей удаляется, можно добавить логирование в файл или отправку уведомлений на email. Пример простого логирования:

function wpbloger_delete_old_posts() {
    $days = 180;
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'date_query' => array(
            array('before' => $date, 'inclusive' => true),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);
    $deleted_count = 0;

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

    if ($deleted_count > 0) {
        error_log("WPBloger: Удалено $deleted_count старых записей.");
    }
}

Логи можно просмотреть в файле wp-content/debug.log, если включено логирование ошибок.

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

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

  • Bulk Delete — позволяет удалять записи по разным критериям, включая дату публикации. Умеет работать по расписанию.
  • Auto Delete Posts — автоматизирует удаление записей старше заданного возраста, прост в настройке.

Оба плагина можно найти на официальном репозитории WordPress, а также на wpshop.ru с подробными обзорами и инструкциями.

Преимущества собственного кода над плагинами

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

Заключение

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматический раздел с соответствующими постами в WordPress по меткам и категориям
23.03.2026
Как безопасно удалить файлы темы в WordPress без последствий
19.12.2025
Как удалить ненужные типы записей в WooCommerce без помощи плагинов
19.04.2026
Как изменить фильтр записей в WordPress по автору и категории
13.12.2025
Как массово удалить заказы WooCommerce со статусом "Отменен"
07.07.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше