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

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

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

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

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

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

Реализация автоматического удаления записей старше определённого срока с помощью кода

Для автоматизации удаления можно написать функцию, которая будет удалять записи, например, старше 180 дней. Следующий пример кода показывает, как это сделать.

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

function wponline_delete_old_posts() {
    $days = 180; // Количество дней, после которых записи считаются устаревшими
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d', strtotime("-{$days} days")),
    );

    $old_posts = get_posts(array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array($date_query),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ));

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

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

Автоматический запуск функции через WP-Cron

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

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

add_action('wponline_delete_old_posts_hook', 'wponline_delete_old_posts');

Этот код проверяет, есть ли уже запланированное событие, и если нет — создаёт его с ежедневным запуском. Затем наш обработчик подключается к этому событию.

Автоматическое удаление старых комментариев и отзывов

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

Код для удаления старых комментариев

function wponline_delete_old_comments() {
    global $wpdb;
    $days = 90;
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $comments = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_date < %s",
        $date
    ));

    if (!empty($comments)) {
        foreach ($comments as $comment_id) {
            wp_delete_comment($comment_id, true);
        }
    }
}

// Запускаем удаление вместе с удалением постов или отдельным событием
add_action('wponline_delete_old_comments_hook', 'wponline_delete_old_comments');

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

Этот код удалит все комментарии, которые были созданы более 90 дней назад.

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

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

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

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

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

Если на вашем сайте используются кастомные типы записей (custom post types), автоматическое удаление по дате можно настроить аналогично. Важно адаптировать код, указав нужный тип.

function wponline_delete_old_custom_posts() {
    $days = 365;
    $custom_post_type = 'product'; // замените на нужный тип

    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d', strtotime("-{$days} days")),
    );

    $old_posts = get_posts(array(
        'post_type'      => $custom_post_type,
        'post_status'    => 'publish',
        'date_query'     => array($date_query),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ));

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

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

Рекомендации по безопасности и тестированию

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

  • Всегда тестируйте функции на тестовом сайте или локальной копии перед применением на продакшене.
  • Используйте параметр wp_delete_post($post_id, false), если хотите сначала переместить записи в корзину, чтобы можно было восстановить их при ошибке.
  • Регулярно делайте резервные копии базы данных, особенно если используете автоматическое удаление.
  • Добавляйте логи в функции удаления, чтобы отслеживать, какие записи были удалены.

Вывод

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

Автоматическое удаление старых записей в WordPress по дате публикации
03.02.2026
WooCommerce: как удалить старые вариации товаров с помощью кода
13.05.2026
Как автоматизировать и контролировать запуски WP-Cron в WordPress
19.03.2026
Автоматическое удаление старых комментариев в WordPress: практическое решение
13.12.2025
Как добавить автоматическое удаление неактивных пользователей в WordPress
14.02.2026