Диагностика проблемы с вариантами без остатка
В магазине на 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 вариаций. При необходимости доработайте соответствующие фильтры или шаблоны.
Проверка результата
Чтобы убедиться, что автоматическое отключение работает:
- Создайте или отредактируйте вариацию с количеством 0.
- Очистите кеш сайта и браузера.
- Перейдите на страницу товара и попробуйте выбрать эту вариацию.
- Вариация должна быть недоступна для выбора (отсутствовать в списке или быть неактивной).
Частые ошибки и как их исправить
- Вариации все равно доступны: проверьте, включено ли управление запасами на уровне вариации, а не только на уровне товара.
- Кеширование мешает отображению: отключите кеширование или очистите кеш после внесения изменений.
- Код добавлен в неподходящее место: код должен быть в functions.php дочерней темы или в плагине, а не в файлах ядра WooCommerce.
- Проблемы с другими плагинами: некоторые плагины для управления запасами могут переопределять стандартное поведение WooCommerce. Проверьте совместимость.
Практические советы по безопасности и производительности
- Не используйте тяжелые запросы к базе данных в фильтрах: в примере используется объект варианта, который уже загружен, что минимизирует нагрузку.
- Кэшируйте результаты, если вариаций много: при больших магазинах добавьте transient-кэширование, чтобы не вызывать лишние операции.
- Тестируйте на staging-сайте: прежде чем внедрять код на рабочем магазине, проверьте его на тестовом окружении.
- Резервное копирование: всегда делайте бэкап сайта и базы перед изменениями.
Сравнение способов отключения вариантов без остатка
| Способ | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Включить опцию WooCommerce «Скрывать товары без запаса» | Простая настройка Не требует кода | Не работает для вариаций Только для целых товаров | Подходит для простых магазинов |
| Плагин для управления запасами вариаций | Готовые функции Расширенные настройки | Может влиять на производительность Платные решения | Для магазинов со сложным ассортиментом |
Кастомный код с фильтром woocommerce_variation_is_active | Легкий и быстрый Контроль над логикой | Требует навыков разработки Нужно тестировать | Оптимальный для разработчиков |