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

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

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

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

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

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

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

Регистрация пользовательского крон-задачи

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

function wpboard_delete_old_posts() {
    $args = [
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => '90 days ago',
            ],
        ],
        '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 - удалить без перемещения в корзину
        }
    }
}

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

// Привязываем функцию к событию
add_action('wpboard_daily_delete_old_posts', 'wpboard_delete_old_posts');

Данный код удаляет все публикации старше 90 дней каждый день. Вы можете изменить параметры, например, тип записи или период.

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

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

function wpboard_clear_scheduled_delete_old_posts() {
    $timestamp = wp_next_scheduled('wpboard_daily_delete_old_posts');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpboard_daily_delete_old_posts');
    }
}
// Используйте хук деактивации плагина или темы
// register_deactivation_hook(__FILE__, 'wpboard_clear_scheduled_delete_old_posts');

Удаление старого контента с помощью плагинов

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

  • WP Bulk Delete — очень мощный плагин, который позволяет удалять посты, страницы, кастомные типы, комментарии по различным параметрам, включая дату публикации. Можно настроить регулярное удаление через планировщик.
  • Auto Delete Posts — простой плагин, который удаляет записи старше заданного количества дней автоматически.
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpboard.ru&utm_medium=article&utm_campaign=kak-sdelat-avtomaticheskoe-udaleniye-starogo-kontenta-v-wordpress) — многофункциональный плагин для оптимизации сайта, в том числе содержит инструменты для удаления и очистки базы данных.

При выборе плагина обращайте внимание на отзывы и совместимость с вашей версией WordPress.

Удаление не только записей, но и медиафайлов

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

Для этого можно расширить функцию удаления, добавив удаление вложений:

function wpboard_delete_old_posts_with_attachments() {
    $args = [
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => '90 days ago',
            ],
        ],
        '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) {
            // Получаем вложения
            $attachments = get_attached_media('', $post_id);
            foreach ($attachments as $attachment) {
                wp_delete_attachment($attachment->ID, true);
            }
            wp_delete_post($post_id, true);
        }
    }
}

Это поможет полностью освободить место и поддерживать чистоту данных.

Советы по безопасности и резервному копированию

Автоматическое удаление контента — операция необратимая, поэтому крайне рекомендуется:

  • Настроить регулярное резервное копирование сайта и базы данных;
  • Тестировать скрипты удаления на тестовом сайте;
  • Добавлять логирование действий удаления, чтобы отслеживать, что именно удаляется;
  • Использовать безопасные методы удаления (например, сначала перемещать записи в корзину, а не удалять сразу).

Логирование и уведомления о выполнении удаления

Для контроля процесса полезно добавить логирование и отправку уведомлений на email администратора.

function wpboard_delete_old_posts_with_logging() {
    $args = [
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => '90 days ago',
            ],
        ],
        '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) {
        $admin_email = get_option('admin_email');
        wp_mail($admin_email, 'Удаление старого контента', "Автоматически удалено $deleted_count старых записей.");
    }
}

add_action('wpboard_daily_delete_old_posts', 'wpboard_delete_old_posts_with_logging');

Так вы будете всегда в курсе, какие изменения происходят.

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

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

Как создать адаптивные шаблоны WordPress
10.11.2025
Как использовать хук woocommerce_before_calculate_totals для изменения цены товаров в WooCommerce
25.04.2026
Как удалить варианты товаров WooCommerce с помощью кода
22.04.2026
Как создать собственный виджет в WordPress с примером кода
28.12.2025
Как удалить автоматически создаваемые категории в WordPress
03.04.2026