WooCommerce: как автоматически удалять старый контент и вариации товаров

Диагностика проблемы с накоплением старого контента и вариаций в WooCommerce

В магазинах на WooCommerce со временем накапливаются устаревшие или неактивные товары, а также лишние вариации, которые замедляют работу сайта и усложняют управление каталогом. Основные симптомы:

  • Замедление загрузки страниц каталога и админки;
  • Большой объем базы данных и бэкапов;
  • Ошибки в отображении товаров из-за конфликтующих вариаций;
  • Проблемы с SEO из-за большого числа неактивных страниц;
  • Ручное удаление занимает много времени и рискованно.

Как автоматически удалять старые товары и вариации в WooCommerce — пошаговое решение

1. Определяем критерии «старого» контента

В большинстве случаев под «старым» понимаются товары без продаж или без обновлений более 6–12 месяцев, а вариации — неиспользуемые или с пустыми атрибутами.

2. Создаем WP-Cron задачу для автоматизации удаления

Добавим в functions.php тему или в отдельный плагин следующий код, чтобы запускать очистку еженедельно:

if ( ! wp_next_scheduled( 'wc_auto_delete_old_products' ) ) {
    wp_schedule_event( time(), 'weekly', 'wc_auto_delete_old_products' );
}

add_action( 'wc_auto_delete_old_products', 'wc_delete_old_products_and_variations' );

function wc_delete_old_products_and_variations() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'date_query'     => [
            'before' => date( 'Y-m-d', strtotime( '-6 months' ) ),
        ],
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ],
        ],
        'fields'         => 'ids',
    ];
    $old_products = get_posts( $args );

    foreach ( $old_products as $product_id ) {
        wp_delete_post( $product_id, true );
    }
}

Этот код удалит товары, которые не обновлялись более 6 месяцев и находятся в статусе "нет в наличии".

3. Удаление старых вариаций товаров

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

function wc_delete_old_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_variation_description',
                'value'   => '',
                'compare' => '=',
            ],
        ],
        'fields'         => 'ids',
    ];
    $variations = get_posts( $args );

    foreach ( $variations as $variation_id ) {
        wp_delete_post( $variation_id, true );
    }
}

add_action( 'wc_auto_delete_old_products', 'wc_delete_old_variations' );

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

Чтобы убедиться, что удаление работает корректно:

  • Выполните вручную задачу WP-Cron через WP-CLI или плагин WP Crontrol:
    wp cron event run wc_auto_delete_old_products
  • Проверьте, что в админке WooCommerce пропали старые товары и вариации;
  • Просмотрите логи сервера и базы данных на предмет ошибок удаления;
  • Проверьте скорость загрузки страниц каталога и админки до и после;
  • Резервное копирование перед тестами обязательно!

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

  • Удаляются нужные товары: Проверьте параметры date_query и meta_query — они должны точно отражать логику выбора. Лучше сначала логировать ID на удаление.
    Решение: замените wp_delete_post на логирование в файл или опцию и проверьте список.
  • Задача WP-Cron не запускается: Убедитесь, что на сервере работает WP-Cron, или настройте системный Cron для вызова wp-cron.php.
    Решение: используйте плагин WP Crontrol для диагностики и запуска событий.
  • Не удаляются вариации: Возможно, мета-ключ _variation_description не подходит для вашей темы или плагинов.
    Решение: используйте отладчик мета-данных, чтобы подобрать правильный ключ и условия.

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

  • Перед удалением данных делайте резервные копии базы и файлов.
  • При большом объеме товаров используйте пакетное удаление с лимитом и паузами, чтобы избежать таймаутов.
  • Для мониторинга используйте логирование ID удаляемых товаров в отдельный файл.
  • Если у вас есть плагин Clearfy Pro от WPShop, используйте его инструменты для удаления дублей и оптимизации базы, чтобы дополнительно очистить WooCommerce.
  • Оптимизируйте запросы с помощью индексов в базе и минимизируйте мета-запросы.

Сравнение подходов: плагин vs. кастомный код

Критерий Плагин Кастомный код Компромисс
Простота внедрения Высокая — готовые настройки Средняя — требует знаний PHP и WP API Использовать готовый код из статьи и адаптировать
Гибкость Ограничена функционалом плагина Полная — можно задать любые условия Комбинировать код и плагины для расширения
Производительность Может нагружать сайт дополнительными запросами Оптимизируемые запросы и Cron-задачи Оптимизировать код и настроить Cron
Безопасность Зависит от качества плагина Контроль над удалением и логированием Добавлять логи и резервные копии
WordPress: как добавить собственные метаполя в посты
19.11.2025
Как избежать проблем с загрузкой больших файлов в WordPress
14.06.2026
Как удалить автоматически пустые категории в WordPress
24.03.2026
Как отключить автозагрузку медиа в WordPress для ускорения сайта
15.04.2026
WooCommerce: как автоматически удалять старый контент и вариации товаров
06.07.2026