WooCommerce: автоматическое отключение неактивных вариантов товаров

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

В WooCommerce часто встречается ситуация, когда на странице товара остаются варианты (вариации), которые физически отсутствуют на складе или неактивны по другим причинам, но при этом они доступны для выбора покупателем. Это приводит к негативному опыту, увеличению возвратов и путанице. Задача — автоматически отключать или скрывать такие варианты, чтобы покупатели не могли их выбрать.

Как определить, что варианты товара неактивны?

  • Вариант отсутствует на складе (stock quantity = 0) и управление запасами включено.
  • Вариант отмечен как «нет в наличии» (stock status = outofstock).
  • Вариант отключен администратором вручную.

Проверить состояние вариаций можно через панель администратора WooCommerce в разделе Товары > Вариации, а также программно через объект WC_Product_Variation.

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

1. Настройка WooCommerce для управления запасами на уровне вариаций

Убедитесь, что для каждого варианта товара включено управление запасами и правильно задан статус наличия.

2. Использование фильтра для исключения неактивных вариантов из вывода

WooCommerce выводит варианты на странице товара через функцию woocommerce_available_variation. С помощью фильтра woocommerce_variation_is_active можно контролировать активность вариантов.

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

add_filter('woocommerce_variation_is_active', 'disable_out_of_stock_variations', 10, 2);function disable_out_of_stock_variations($is_active, $variation) {    if (!$variation instanceof WC_Product_Variation) {        return $is_active;    }    // Проверяем управление запасами и наличие на складе    if ($variation->managing_stock() && $variation->get_stock_quantity() <= 0) {        return false; // Отключаем вариант если нет на складе    }    if ($variation->get_stock_status() === 'outofstock') {        return false; // Отключаем вариант если статус outofstock    }    return $is_active;}

3. Автоматическое переключение статуса варианта при обновлении запасов

Чтобы статус варианта менялся автоматически при изменении количества, добавим обработчик на сохранение вариации:

add_action('woocommerce_update_product_variation', 'auto_disable_variation_based_on_stock', 10, 1);function auto_disable_variation_based_on_stock($variation_id) {    $variation = wc_get_product($variation_id);    if (!$variation) {        return;    }    if ($variation->managing_stock() && $variation->get_stock_quantity() <= 0) {        $variation->set_stock_status('outofstock');    } else {        $variation->set_stock_status('instock');    }    $variation->save();}

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

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

Частые ошибки и способы их исправления

  • Варианты с нулевым запасом все еще отображаются: проверьте, что фильтр woocommerce_variation_is_active не переопределяется другим плагином или темой. Попробуйте временно отключить другие плагины.
  • Изменения не применяются автоматически: убедитесь, что хук woocommerce_update_product_variation срабатывает. Иногда обновление вариации происходит через сторонние инструменты, которые не вызывают этот хук.
  • Проблемы с кешированием: если используется кеширование страниц или объектов, изменения статуса вариаций могут не отображаться сразу. Очистите кеш после обновления.

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

  • Добавляйте код в дочернюю тему или отдельный плагин, чтобы избежать потери изменений при обновлении.
  • Не выполняйте тяжелую логику в хуках, используйте только проверку и обновление статусов.
  • Регулярно проверяйте обновления WooCommerce, так как внутренние хуки могут меняться.
  • Если у вас большой каталог, тестируйте влияние кода на скорость загрузки страницы товара.

Сравнение способов отключения неактивных вариантов

МетодОписаниеПреимуществаНедостатки
Использование фильтра woocommerce_variation_is_activeПрограммное отключение вариантов на фронтендеГибкий, без плагинов, контролируемый кодомЗависит от правильной реализации, возможны конфликты с темами
Ручное отключение вариаций в админкеАдминистратор вручную меняет статус вариантаПростота, не требует кодаТрудоемко при большом количестве товаров, риск ошибок
Плагины управления запасамиСпециализированные решения для учета и скрытияБогатый функционал, автоматизацияДополнительные расходы, возможные конфликты
Как отправлять JSON данные из WordPress внешним сервисам
14.04.2026
WooCommerce: отладка проблем с распоряжением заказами и их статусами
13.06.2026
Как отладить конфликты PHP в WordPress с помощью Xdebug
17.02.2026
Как удалить кеш в WordPress: практические способы и примеры
21.11.2025
Как создать собственный shortcode в WordPress
06.11.2025