wpcat.ru wordpress WPCat.ru

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

Проблема: варианты товаров доступны для покупки при их отсутствии на складе

В 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 без неактивных вариантов Сложнее реализовать, зависит от темы, возможны баги
Плагины управления запасами Автоматизация и расширенный контроль запасов Дополнительные функции, удобство Нагрузка, может конфликтовать с кастомным кодом
×
Обнови свой WordPress!

Держи скидку 15% на премиум тему Reboot

Купить со скидкой ⋙