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

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

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

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

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

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

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

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

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

function wptest_delete_old_posts() {
    $days = 180; // Удалять записи старше 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 - без помещения в корзину
        }
    }
}

Эта функция получает ID всех публикаций, которые старше 180 дней, и удаляет их.

Регистрация задачи с помощью WP-Cron

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

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

add_action('wptest_delete_old_posts_hook', 'wptest_delete_old_posts');

Этот код проверяет, запланирована ли уже задача, и если нет — создаёт её с интервалом «daily» (каждый день). При срабатывании задачи запускается функция удаления.

Дополнительные настройки и советы

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

function wptest_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',
        'category__not_in' => array(5, 10), // исключаем категории с ID 5 и 10
        '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);
        }
    }
}

Так можно защитить ценный контент от удаления.

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

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

Плагин WP Bulk Delete

Один из самых популярных плагинов для массового удаления записей по разным критериям: по дате, категории, статусу и др. Имеет возможность планировать задачи через WP-Cron.

Скачать и узнать подробнее можно на wpshop.ru.

Плагин Advanced Database Cleaner

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

Подробнее и загрузка — wpshop.ru.

Отладка и мониторинг автоматического удаления

Автоматические задачи могут не сработать, если WP-Cron не запускается из-за низкой посещаемости сайта или блокировок на сервере. Для проверки можно использовать плагин WP Crontrol, который позволяет просматривать и запускать задачи вручную.

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

function wptest_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);
            error_log('Deleted post ID: ' . $post_id);
        }
    }
}

Это поможет отследить, какие записи были удалены.

Заключение

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

Рекомендуется тестировать функционал на тестовом сайте и всегда делать резервные копии перед внедрением автоматизации удаления.

Автоматический импорт постов из Яндекс.Дзен в WordPress
16.02.2026
Как отправить форму на Telegram из WordPress без плагинов
02.03.2026
Как добавить автоматическое удаление старых записей в WordPress
21.03.2026
Как отправить форму на Telegram из WordPress без плагинов
11.03.2026
Как удалить старые вариации товара в WooCommerce
19.04.2026