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

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

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

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

  • Старые новости и объявления;
  • Акции и предложения, которые давно закончились;
  • Записи с неактуальной информацией;
  • Технический или тестовый контент, забытый после разработки.

Удаление такого контента помогает:

  • Улучшить SEO, избавившись от дублированных и нерелевантных страниц;
  • Снизить нагрузку на базу данных и сервер;
  • Сделать админпанель чище и удобнее для навигации.

Однако ручное удаление — это долго и неудобно, особенно если старого контента много. Поэтому логично автоматизировать этот процесс.

Автоматическое удаление старых записей с помощью WP-Cron и кастомного кода

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

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

Ниже пример функции, которая удаляет все записи типа post, опубликованные более 180 дней назад:

function wpboot_delete_old_posts() {
    global $wpdb;
    $days = 180; // число дней для хранения
    $date = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));

    // Получаем ID постов, старше указанной даты
    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
        $date
    ));

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true); // true - удаление без корзины
        }
    }
}

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

Регистрируем задачу в WP-Cron

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

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

add_action('wpboot_cleanup_old_posts_event', 'wpboot_delete_old_posts');

Здесь мы планируем запуск функции wpboot_delete_old_posts один раз в день.

Отмена задачи при деактивации плагина или темы

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

function wpboot_clear_scheduled_old_posts_cleanup() {
    $timestamp = wp_next_scheduled('wpboot_cleanup_old_posts_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpboot_cleanup_old_posts_event');
    }
}
register_deactivation_hook(__FILE__, 'wpboot_clear_scheduled_old_posts_cleanup');

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

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

Настройка Bulk Delete для удаления старых постов

  1. Установите и активируйте плагин Bulk Delete.
  2. Перейдите в Bulk Delete → Delete Posts.
  3. Выберите тип постов (например, «Posts»).
  4. В разделе «Delete posts older than» укажите число дней (например, 180).
  5. Настройте расписание удаления (ежедневно, еженедельно и т.д.).
  6. Сохраните и запустите задачу.

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

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

При автоматическом удалении важно не потерять нужный материал. Вот несколько рекомендаций:

  • Резервное копирование. Перед настройкой автоматического удаления обязательно делайте резервную копию базы данных и файлов сайта.
  • Тестирование на копии. Попробуйте сначала на тестовом сайте, чтобы убедиться, что удаляются только нужные записи.
  • Журнал действий. В код можно добавить запись в лог, чтобы отслеживать, какие посты были удалены.
  • Использование корзины. Можно изменить функцию удаления, чтобы посты сначала попадали в корзину, а не удалялись сразу, например, вызвав wp_trash_post($post_id); вместо wp_delete_post($post_id, true);.

Пример ведения лога удаленных записей

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

    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
        $date
    ));

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            $title = get_the_title($post_id);
            wp_delete_post($post_id, true);
            error_log("[WPBOOT] Deleted post ID: $post_id, Title: $title");
        }
    }
}

В логе PHP (обычно error_log) вы увидите информацию о каждом удаленном посте, что поможет отследить процесс.

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

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

// Пример удаления старых страниц
function wpboot_delete_old_pages() {
    global $wpdb;
    $days = 365; // для страниц можно задать больше дней
    $date = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));

    $old_pages = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' AND post_date < %s",
        $date
    ));

    if (!empty($old_pages)) {
        foreach ($old_pages as $page_id) {
            wp_delete_post($page_id, true);
        }
    }
}

Также для кастомных типов записей замените 'page' или 'post' на ваш slug типа записи.

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

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

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

Как быстро использовать атрибуты WooCommerce для фильтрации и вывода товаров
03.05.2026
Почему не работают купоны в WooCommerce и как это исправить
04.06.2026
WooCommerce: автоматическое изменение стоимости товара при применении купона
19.06.2026
Как использовать WPRemark для автоматического модерирования комментариев в WordPress
17.02.2026
Автоматическое удаление старых записей в WordPress через cron с примерами
25.02.2026