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

Ведение сайта на WordPress часто сопровождается накоплением большого объёма контента, который со временем становится устаревшим или ненужным. Чтобы поддерживать сайт в актуальном состоянии и не перегружать базу данных, важно автоматизировать процесс удаления такого контента. В этой статье подробно рассмотрим, как настроить автоматическое удаление старых записей и пользовательских типов записей (custom post types) с помощью WP-Cron и полезных плагинов, а также приведём примеры кода для реализации гибких решений.

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

Накопление устаревших материалов на сайте может негативно повлиять на несколько ключевых аспектов:

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

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

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

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

Создание кастомной функции удаления

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

function wptest_delete_old_posts() {
    // Определяем дату, старше которой нужно удалить записи
    $date = date('Y-m-d H:i:s', strtotime('-90 days'));

    // Получаем ID постов, которые нужно удалить
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date,
            ),
        ),
        '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 — удалять без перемещения в корзину
        }
    }
}

Регистрация WP-Cron задачи

Чтобы запускать функцию ежедневно, добавим событие в WP-Cron и хук:

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

add_action('wptest_daily_old_posts_cleanup', 'wptest_delete_old_posts');

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

Удаление пользовательских типов записей (custom post types)

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

function wptest_delete_old_custom_posts() {
    $date = date('Y-m-d H:i:s', strtotime('-180 days'));

    $args = array(
        'post_type'      => 'events',
        'post_status'    => 'publish',
        'date_query'     => array(
            array('before' => $date),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_events = get_posts($args);

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

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

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

Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:

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

Преимущество плагинов в удобном интерфейсе и дополнительных настройках без необходимости писать код.

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

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

  • Резервное копирование. Регулярно делайте бэкапы базы данных, особенно перед настройкой автоматического удаления.
  • Логирование. Записывайте в лог информацию об удалённых записях для контроля.
  • Тестирование. Перед включением в рабочем режиме протестируйте функцию на тестовом сайте.

Для логирования можно добавить простую запись в файл:

function wptest_log_deleted_post($post_id) {
    $log = '[' . date('Y-m-d H:i:s') . '] Deleted post ID: ' . $post_id . "\n";
    file_put_contents(WP_CONTENT_DIR . '/wptest_deleted_posts.log', $log, FILE_APPEND);
}

// Вызов внутри цикла удаления
wp_delete_post($post_id, true);
wptest_log_deleted_post($post_id);

Заключение

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

Как сделать автоматический импорт постов в WordPress с помощью плагинов и кода
21.01.2026
Как создать собственный шорткод WordPress
01.11.2025
Как сделать автоматический откат обновлений WordPress при ошибках
12.01.2026
Как автоматизировать обновления плагинов и тем WordPress без риска для сайта
31.01.2026
Как создать наступление по AJAX в WordPress
04.11.2025