Проблема: варианты товаров доступны для покупки при их отсутствии на складе
В WooCommerce часто возникает ситуация, когда в товаре есть несколько вариантов (атрибутов), и некоторые из них заканчиваются на складе. По умолчанию такие варианты могут оставаться доступны для выбора и покупки, что вводит покупателя в заблуждение и создает негативный пользовательский опыт.
Задача — автоматически отключать или скрывать варианты товаров, которых нет в наличии, чтобы покупатель не мог их выбрать.
Диагностика проблемы
Чтобы убедиться, что проблема именно в отображении отсутствующих вариантов:
- Перейдите в карточку товара с вариациями.
- Откройте выпадающий список выбора варианта.
- Проверьте, есть ли варианты, у которых запас 0 или меньше, но они доступны для выбора.
- Убедитесь, что для вариаций установлен контроль запасов (вкладка «Запасы» в настройках вариации).
Если варианты с нулевым запасом доступны, значит WooCommerce не отключает их автоматически.
Пошаговое решение: как автоматически отключать варианты без запаса
WooCommerce не скрывает и не отключает варианты по умолчанию, но можно добавить кастомный код в functions.php вашей темы или дочерней темы.
1. Отключение вариантов без запаса в выпадающем списке
add_filter('woocommerce_variation_is_active', 'disable_out_of_stock_variations', 10, 2);
function disable_out_of_stock_variations($is_active, $variation) {
if (!$variation->is_in_stock()) {
return false; // Отключаем вариант
}
return $is_active;
}
Этот фильтр отключит варианты, которых нет в наличии, делая их недоступными для выбора.
2. Опционально: скрыть отсутствующие варианты полностью
Если нужно не просто отключить, а полностью скрыть варианты, понадобится более сложный JS-скрипт, так как WooCommerce формирует список вариантов на клиенте. Однако первый способ покрывает большинство задач.
Проверка результата после внедрения
- Очистите кеш сайта и браузера.
- Перейдите на страницу товара с вариациями.
- Откройте выбор варианта. Варианты с нулевым запасом должны быть неактивными (серого цвета, не кликабельными).
- Попробуйте выбрать неактивный вариант — он не должен подтверждаться.
Если вариант отключен корректно — задача решена.
Частые ошибки и как их исправить
- Варианты продолжают быть активными: Проверьте, что у вариаций правильно включен контроль запасов и выставлен статус "нет в наличии".
- Код не срабатывает: Убедитесь, что код добавлен в functions.php активной темы или дочерней темы, а не в плагинах, которые могут конфликтовать.
- Кеширование мешает проверить изменения: Очистите кеш сайта (если используется кеш-плагин) и браузера.
- Варианты с запасом 0 отображаются как доступные: Возможно, настройка WooCommerce «Разрешить заказы при отсутствии товара» включена. Ее нужно отключить в WooCommerce > Настройки > Товары > Запасы.
Практические советы по производительности и безопасности
- Добавляйте кастомный код в дочернюю тему, чтобы не потерять изменения при обновлении.
- Не используйте тяжелые JS-скрипты для решения этой задачи, встроенный PHP-фильтр более оптимален.
- Проверяйте влияние изменений на мобильные устройства, где выбор варианта может работать иначе.
- Используйте WP_DEBUG и логи ошибок для отладки, если код не работает.
- Оптимизируйте запасы товаров и своевременно обновляйте статусы для корректной работы фильтра.
Сравнение способов отключения вариантов в WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
Фильтр woocommerce_variation_is_active |
Отключает варианты без запаса в PHP | Просто, быстро, не требует JS | Варианты видны, но неактивны |
| Кастомный JS для скрытия вариантов | Полное скрытие отсутствующих вариантов на фронтенде | Чистый UI без неактивных вариантов | Сложнее реализовать, зависит от темы, возможны баги |
| Плагины управления запасами | Автоматизация и расширенный контроль запасов | Дополнительные функции, удобство | Нагрузка, может конфликтовать с кастомным кодом |