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

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

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

Чтобы убедиться, что у вас есть неактивные варианты, зайдите в раздел Товары > Все товары, выберите вариативный товар и откройте его редактирование. Вкладка "Вариации" покажет все варианты. Неактивные варианты — те, у которых запас равен нулю или статус "отключено".

Как проверить наличие неактивных вариантов в базе

SELECT p.ID, pm.meta_key, pm.meta_value FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation' AND (pm.meta_key = '_stock_status' AND pm.meta_value = 'outofstock');

Этот запрос выведет варианты с отсутствием на складе (outofstock).

Пошаговое решение: автоматическое удаление неактивных вариантов

Для автоматизации процесса удаления неактивных вариантов используем WP-CLI или создадим кастомный скрипт в functions.php темы или в отдельном плагине. Ниже вариант с хуком WP-Cron, который ежедневно проверяет и удаляет варианты с нулевым запасом и статусом "outofstock".

function wpbuy_remove_inactive_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ],
            [
                'key'     => '_manage_stock',
                'value'   => 'yes',
                'compare' => '=',
            ],
            [
                'key'     => '_stock',
                'value'   => 0,
                'compare' => '<=',
                'type'    => 'NUMERIC',
            ],
        ],
    ];

    $inactive_variations = get_posts($args);

    foreach ($inactive_variations as $variation) {
        wp_delete_post($variation->ID, true); // true - без помещения в корзину
    }
}

if (!wp_next_scheduled('wpbuy_daily_inactive_variations_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpbuy_daily_inactive_variations_cleanup');
}
add_action('wpbuy_daily_inactive_variations_cleanup', 'wpbuy_remove_inactive_variations');

Этот код создаст ежедневное задание, которое удалит все варианты с нулевым остатком и статусом outofstock, если у варианта включен учёт остатков (_manage_stock = yes).

Альтернативный вариант: ручной запуск через WP-CLI

wp post delete $(wp post list --post_type=product_variation --meta_key=_stock_status --meta_value=outofstock --field=ID) --force

Команда удалит все варианты без остатка без помещения в корзину.

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

  • Перейдите в админку WooCommerce в раздел Товары > Все товары и откройте вариативный товар. Во вкладке вариации убедитесь, что неактивные варианты исчезли.
  • Для проверки через базу данных повторите SQL-запрос из раздела диагностики — запрос должен вернуть пустой результат.
  • Проверьте логи WP-Cron, если настроены — должно быть событие очистки без ошибок.

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

  • Не удаляются варианты с нулевым остатком: Проверьте, что у варианта включён учёт остатков (_manage_stock). Если нет, то условие фильтра не сработает.
  • Удаление удаляет ошибки: Если варианты удаляются, но потом появляются снова, возможно, плагины или импортеры восстанавливают их. Проверьте автоматические импорты и синхронизации.
  • Пропуск активных вариантов: Скрипт ориентируется на мета-данные. Если статус запасов не обновляется корректно, добавьте дополнительную проверку атрибутов.
  • WP-Cron не срабатывает: Убедитесь, что на хостинге разрешён WP-Cron или настройте системный cron для wp-cron.php.

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

  • Перед внедрением автоматического удаления создайте резервную копию базы данных.
  • Используйте Clearfy Pro для оптимизации базы и удаления дублей, это поможет улучшить производительность.
  • Если база большая, ограничьте количество вариантов, обрабатываемых за один запуск, добавив параметр posts_per_page и пагинацию.
  • Мониторьте логи WP-Cron и ошибки сервера, чтобы вовремя отследить сбои в работе скрипта.

Сравнение подходов к удалению неактивных вариантов

МетодПреимуществаНедостатки
Автоматический WP-Cron Полная автоматизация, не требует ручного вмешательства Зависит от работы WP-Cron, нагрузка на сайт при большом количестве вариаций
Ручной запуск WP-CLI Мгновенное выполнение, подходит для больших баз Требует доступа к серверу и знаний WP-CLI
Ручное удаление через админку Простота, визуальный контроль Трудоемко при большом количестве вариантов
WooCommerce: автоматическое удаление недоработанных заказов
30.04.2026
Как создать автоматический импорт продуктов в WooCommerce с примерами кода
13.04.2026
Авто удаление спама в комментариях WordPress: лучшие практики и примеры кода
31.01.2026
WooCommerce: автоматическое изменение цен и скидок по расписанию без плагинов
07.05.2026
WordPress: как избежать конфликтов между плагинами и быстро находить ошибки
23.12.2025