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

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

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

Проверьте, действительно ли проблема есть на вашем сайте. Для этого:

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

Если вариант доступен, значит автоматическое отключение не работает или отсутствует.

Почему WooCommerce не отключает варианты без остатка по умолчанию?

WooCommerce обычно скрывает варианты без запаса, если в настройках включена опция «Скрывать варианты без запаса» (Hide out of stock items from the catalog). Однако эта опция применима только к целым товарам, а не к вариациям. Для вариаций автоматического скрытия нет.

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

Пошаговое решение: автоматическое отключение вариантов без остатка через код

1. Подключение фильтра для модификации доступности вариаций

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

add_filter('woocommerce_variation_is_active', 'custom_disable_out_of_stock_variations', 10, 2);
function custom_disable_out_of_stock_variations($is_active, $variation) {
    $stock_quantity = $variation->get_stock_quantity();
    $is_manage_stock = $variation->managing_stock();

    if ($is_manage_stock && $stock_quantity !== null && $stock_quantity <= 0) {
        return false; // Отключаем вариант
    }
    return $is_active;
}

2. Проверка отключения варианта в каталоге и на странице товара

Этот фильтр заставит WooCommerce считать вариант неактивным, если его количество на складе 0 или меньше. Вариант перестанет отображаться в выпадающих списках выбора на странице товара.

3. Дополнительно: скрыть варианты без остатка из AJAX фильтров и поиска

Если вы используете AJAX фильтрацию или поиск по вариациям, убедитесь, что они учитывают состояние is_active вариаций. При необходимости доработайте соответствующие фильтры или шаблоны.

Проверка результата

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

  1. Создайте или отредактируйте вариацию с количеством 0.
  2. Очистите кеш сайта и браузера.
  3. Перейдите на страницу товара и попробуйте выбрать эту вариацию.
  4. Вариация должна быть недоступна для выбора (отсутствовать в списке или быть неактивной).

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

  • Вариации все равно доступны: проверьте, включено ли управление запасами на уровне вариации, а не только на уровне товара.
  • Кеширование мешает отображению: отключите кеширование или очистите кеш после внесения изменений.
  • Код добавлен в неподходящее место: код должен быть в functions.php дочерней темы или в плагине, а не в файлах ядра WooCommerce.
  • Проблемы с другими плагинами: некоторые плагины для управления запасами могут переопределять стандартное поведение WooCommerce. Проверьте совместимость.

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

  • Не используйте тяжелые запросы к базе данных в фильтрах: в примере используется объект варианта, который уже загружен, что минимизирует нагрузку.
  • Кэшируйте результаты, если вариаций много: при больших магазинах добавьте transient-кэширование, чтобы не вызывать лишние операции.
  • Тестируйте на staging-сайте: прежде чем внедрять код на рабочем магазине, проверьте его на тестовом окружении.
  • Резервное копирование: всегда делайте бэкап сайта и базы перед изменениями.

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

СпособПлюсыМинусыКомпромисс
Включить опцию WooCommerce «Скрывать товары без запаса»Простая настройка
Не требует кода
Не работает для вариаций
Только для целых товаров
Подходит для простых магазинов
Плагин для управления запасами вариацийГотовые функции
Расширенные настройки
Может влиять на производительность
Платные решения
Для магазинов со сложным ассортиментом
Кастомный код с фильтром woocommerce_variation_is_activeЛегкий и быстрый
Контроль над логикой
Требует навыков разработки
Нужно тестировать
Оптимальный для разработчиков
Как отключить системные email уведомления WordPress без плагинов
28.12.2025
Как удалить или изменить регистрацию AJAX в WordPress: практические примеры и решения
12.04.2026
Как добавить внутреннюю AJAX-переходку в WordPress без перезагрузки страницы
09.02.2026
Как создать автоматический импорт постов в WordPress из внешнего источника
03.04.2026
Как удалить автоматические редиректы в WordPress: практическое руководство
29.01.2026