Проблема: необходимость скрыть варианты товаров по определённому атрибуту
В WooCommerce бывают ситуации, когда нужно исключить из выбора покупателя некоторые варианты товара, например, цвета или размеры, на которые временно нет поставок или которые не продаются онлайн. Стандартного способа отключить варианты по атрибуту через админку WooCommerce нет — нужно решать через код или плагины.
Диагностика проблемы
Чтобы понять, работает ли исключение правильно, нужно:
- Проверить, что у товара есть вариативный тип и атрибуты, назначенные как вариации.
- Убедиться, что варианты с нужным атрибутом реально присутствуют в базе.
- Проверить, что на фронтенде (странице товара) эти варианты отображаются или скрываются.
Без вмешательства WooCommerce выводит все варианты, даже если они не в наличии. Отключение «В наличии» не исключает вариант из списка выбора без дополнительного кода.
Пошаговое решение: исключаем варианты по атрибуту с помощью фильтра
Для исключения вариаций по определённому значению атрибута используем фильтр woocommerce_variation_is_active. Он позволяет отключать варианты динамически, не удаляя их из базы.
Пример: отключаем все варианты с цветом «Красный»
add_filter('woocommerce_variation_is_active', 'exclude_variations_by_attribute', 10, 2); function exclude_variations_by_attribute($is_active, $variation) { // ID атрибута цвета (узнать в админке или базе) $attribute_name = 'pa_color'; // пример slug атрибута $exclude_value = 'krasnyj'; // slug исключаемого значения атрибута // Получаем значение атрибута вариации $variation_attributes = $variation->get_attributes(); if (!empty($variation_attributes[$attribute_name]) && $variation_attributes[$attribute_name] === $exclude_value) { return false; // отключаем вариант } return $is_active;}Обратите внимание:
pa_color— системный slug атрибута «Цвет» в WooCommerce.krasnyj— slug значения атрибута, которое нужно исключить (не «Красный», а именно slug). Узнать slug можно в разделе «Атрибуты» панели администрирования WooCommerce.
Добавление кода в тему или плагин
Код лучше добавить в файл functions.php дочерней темы или создать небольшой плагин, чтобы изменения не потерялись при обновлении.
Проверка результата после внедрения
- Откройте страницу вариативного товара с указанным атрибутом.
- Убедитесь, что варианты с атрибутом «Красный» больше не отображаются в выпадающем списке выбора вариаций.
- Проверьте, что остальные варианты доступны для выбора и покупки.
- Очистите кэш сайта и браузера, если изменения не видны.
Частые ошибки и как исправить
- Неправильный slug атрибута или значения: проверить в WooCommerce > Продукты > Атрибуты; использовать именно slug, а не название.
- Кэширование: если используется кэш-плагин, нужно сбросить кэш после внесения изменений.
- Код добавлен в неподходящее место: убедитесь, что код в
functions.phpдочерней темы или в отдельном плагине. - Конфликты с другими плагинами: временно отключите другие плагины, если фильтр не срабатывает.
Практические советы по производительности и безопасности
- Фильтр
woocommerce_variation_is_activeсрабатывает при каждой загрузке вариации, поэтому избегайте тяжёлых запросов внутри функции. - Если нужно исключать варианты по нескольким атрибутам, используйте массив исключений и проверяйте их через
in_array(). - Не удаляйте варианты напрямую из базы без резервной копии — лучше скрыть через фильтр.
Альтернативы: плагины vs код
| Способ | Плюсы | Минусы |
|---|---|---|
Код на functions.php | Быстро, бесплатно, гибко, не требует установки плагина | Требует навыков, возможны ошибки, нужно тестировать |
| Плагины для управления вариациями (например, WooCommerce Variation Swatches) | Интуитивно, часто с UI, дополнительные функции | Могут замедлять сайт, требуют обновлений, могут конфликтовать |