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

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

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

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

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

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

Автоматическое удаление старых постов с помощью кода

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

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

function wpaddons_delete_old_posts() {
    $days = 180; // Удалять посты старше 180 дней
    $args = [
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => "$days 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 – удаление без возможности восстановления
        }
    }
}

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

Добавление крон-задачи для автоматизации

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

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

add_action('wpaddons_daily_old_posts_deletion', 'wpaddons_delete_old_posts');

Этот код запланирует запуск функции wpaddons_delete_old_posts ежедневно.

Настройка параметров удаления

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

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

'category__in' => [5],

в массив аргументов $args.

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

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

  • Auto Delete Posts — позволяет настроить автоматическое удаление постов по возрасту, по типу записи и другим параметрам.
  • WP Bulk Delete — мощный инструмент для массового удаления записей, страниц, пользователей и мета-данных с гибкими условиями.

Для примера рассмотрим настройку WP Bulk Delete:

  • Установите и активируйте плагин.
  • Перейдите в меню «WP Bulk Delete» в админке.
  • Выберите «Delete Posts by Date».
  • Укажите дату, до которой посты будут удалены.
  • Настройте расписание, чтобы удаление происходило автоматически.

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

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

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

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

Расширение: автоматическое удаление старых черновиков и ревизий

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

function wpaddons_delete_old_revisions_and_drafts() {
    global $wpdb;
    // Удаляем ревизии старше 30 дней
    $wpdb->query(
        "DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < DATE_SUB(NOW(), INTERVAL 30 DAY)"
    );
    // Удаляем черновики старше 60 дней
    $args = [
        'post_status' => 'draft',
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => '60 days ago',
            ],
        ],
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $old_drafts = get_posts($args);
    if (!empty($old_drafts)) {
        foreach ($old_drafts as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}
add_action('wpaddons_daily_old_posts_deletion', 'wpaddons_delete_old_revisions_and_drafts');

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

Как создать автоматический экспорт пользовательских данных в WordPress
06.04.2026
Автоматическое создание пользователей с уникальным методом регистрации в WordPress
02.02.2026
Автоматическое изменение стоимости товаров в WooCommerce при определённых условиях
21.04.2026
Автоматическое создание пользовательских метаполей в WordPress
15.03.2026
Автоматическое создание многоязычных пользовательских ролей в WordPress с примерами кода
17.02.2026