Автоматическая очистка старого контента и товаров в WooCommerce

Почему необходима автоматическая очистка старого контента и товаров в WooCommerce

С ростом интернет-магазина на WooCommerce количество товаров и связанного контента (описания, отзывы, мета-данные) может быстро увеличиваться, что приводит к нагрузке на базу данных и падению производительности. Автоматическая очистка устаревших товаров и связанных записей помогает поддерживать оптимальную работу сайта и уменьшать вес базы данных.

Диагностика проблемы: как определить устаревший контент и избыточные данные

Для начала нужно определить, какие записи считать устаревшими. Обычно это товары, которые не обновлялись или не продавались длительное время (например, 6 месяцев и более), или записи с определенным статусом (например, «черновик», «отменен»). Проверьте количество таких записей SQL-запросом:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product' AND post_status = 'publish' AND post_modified < DATE_SUB(NOW(), INTERVAL 180 DAY);

Аналогично можно проверить отзывы и мета-данные для этих товаров. Это даст представление о масштабе задачи.

Пошаговое решение: автоматизация удаления старого контента через WP-Cron и кастомную функцию

1. Создаем функцию для удаления товаров старше 180 дней

В файле functions.php вашей темы или в отдельном плагине добавьте следующий код:

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

    // Получаем ID товаров, которые не обновлялись более 180 дней
    $old_products = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product' AND post_status = 'publish' AND post_modified < %s",
        $date_threshold
    ));

    if (!empty($old_products)) {
        require_once(ABSPATH . 'wp-admin/includes/post.php');
        foreach ($old_products as $product_id) {
            wp_delete_post($product_id, true); // true - принудительное удаление без корзины
        }
    }
}

2. Регистрируем WP-Cron задачу для автоматического удаления

Добавьте в functions.php код для запуска функции раз в сутки:

if (!wp_next_scheduled('wpreset_daily_delete_old_products')) {
    wp_schedule_event(time(), 'daily', 'wpreset_daily_delete_old_products');
}
add_action('wpreset_daily_delete_old_products', 'wpreset_delete_old_products');

3. Опционально: очистка связанных мета-данных и отзывов

Удаление через wp_delete_post() удалит все связанные данные, но если вы используете сторонние таблицы, их нужно очищать отдельно. Для стандартных отзывов WooCommerce достаточно стандартной очистки.

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

После запуска Cron-задачи проверьте в админке WooCommerce количество товаров. Также можно вручную запустить функцию из консоли или через временный хук:

add_action('init', function() {
    if (isset($_GET['run_old_products_cleanup']) && current_user_can('manage_options')) {
        wpreset_delete_old_products();
        exit('Old products cleanup run');
    }
});

Перейдите по URL https://ваш-сайт.ru/?run_old_products_cleanup для запуска. Проверьте логи ошибок и базу данных на наличие удаленных записей.

Частые ошибки и как их исправить

  • Проблема: Cron-задача не запускается.
    Причина: WP-Cron зависит от посещений сайта, на низких посещениях задачи могут не срабатывать.
    Решение: Настройте системный cron на вызов wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron или используйте плагин для управления Cron.
  • Проблема: Удаляются нужные товары.
    Причина: Неверно выставлен порог даты или статус.
    Решение: Тщательно протестируйте запрос на выборку товаров перед удалением.
  • Проблема: Высокая нагрузка при удалении большого числа товаров.
    Решение: Разбейте удаление на партии, например по 50 товаров за один запуск.

Практические советы по безопасности и производительности

  • Всегда делайте резервную копию базы данных перед автоматическим удалением.
  • Для больших магазинов используйте пакетное удаление с транзакциями, чтобы избежать блокировок БД.
  • Ограничьте права доступа к URL запуска очистки, например, проверяйте current_user_can('manage_options').
  • Мониторьте логи ошибок и отчеты о производительности после внедрения.
  • Для SEO проверьте, что удаляемые товары не индексируются поисковиками, чтобы избежать 404 и потери трафика.

Сравнение способов автоматизации удаления старого контента в WooCommerce

МетодПлюсыМинусыПример
WP-Cron с кастомной функциейГибкость, можно точно настроить условия удаленияЗависит от посещаемости сайта, возможна нагрузка при большом объемеКод из статьи
Плагины управления контентом (например, WPReset)Простота установки, готовые UIМожет удалять больше, чем нужно, ограниченная кастомизацияWPReset
Ручное удаление через админкуКонтроль над процессомТрудоемко, не подходит для больших объемовАдминка WooCommerce
Как устранить ошибку 429 Too Many Requests в WordPress
13.03.2026
Оптимизация базы данных WordPress при больших объемах данных
13.12.2025
Как использовать WPReset для автоматического восстановления WordPress после ошибок
23.12.2025
Автоматическая очистка старого контента и товаров в WooCommerce
10.06.2026
Как использовать WPReset для автоматического отката изменений в WordPress
05.02.2026