Как настроить автоматическое удаление старого контента в WordPress

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

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

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

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

Проблемы при ручном удалении

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

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

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

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

Пример кода для автоматического удаления записей старше 30 дней

function wpassist_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '30 days ago',
                '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 - удалять без попадания в корзину
        }
    }
}

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

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

// Очистка cron при деактивации
function wpassist_clear_cron() {
    $timestamp = wp_next_scheduled('wpassist_daily_delete_old_posts');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpassist_daily_delete_old_posts');
    }
}
register_deactivation_hook(__FILE__, 'wpassist_clear_cron');

В данном примере мы создаём задачу, которая ежедневно удаляет записи старше 30 дней. Вы можете адаптировать период, изменив параметр 'before' в date_query.

Как исключить важные записи из автоматического удаления

Часто возникает необходимость сохранить определённый контент, например, важные статьи или записи с определённой категорией. Для этого добавим дополнительный параметр tax_query или мета-запросы.

Пример исключения записей по категории

function wpassist_delete_old_posts_except_category() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '30 days ago',
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array('important'),
                'operator' => 'NOT IN',
            ),
        ),
    );

    $old_posts = get_posts($args);

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

В этом примере записи из категории с ярлыком important не будут удалены.

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

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

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

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

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

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

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

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

Пример добавления логирования

function wpassist_delete_old_posts_with_log() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '30 days ago',
                '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) {
            $title = get_the_title($post_id);
            wp_delete_post($post_id, true);
            error_log('WPAssist удалил пост: ID ' . $post_id . ', заголовок: ' . $title);
        }
    }
}

Логи можно просматривать в файле debug.log при включённом режиме отладки в WordPress.

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

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

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

Как создать автономную систему комментирования в WordPress с AJAX
16.04.2026
Как изменить роли пользователей в WordPress с помощью кода
23.03.2026
Как сделать автоматический отчет о проблемах WordPress
07.03.2026
Как удалить пустые meta-поля в WordPress: эффективные методы и примеры
24.02.2026
Автоматическое удаление неактивных заказов в WooCommerce по времени
30.04.2026