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

Проблема отсутствующих вариантов товаров в WooCommerce

В интернет-магазинах на WooCommerce часто возникает ситуация, когда у вариативного товара остаются варианты, которых нет в наличии. Покупатели видят эти варианты, но попытка их выбрать приводит к ошибкам или невозможности оформить заказ. Ручное отключение каждого варианта неудобно при большом ассортименте.

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

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

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

Добавьте в файл functions.php вашей темы этот код для вывода в админке статуса наличия вариантов:

add_filter('woocommerce_variation_is_active', 'check_variation_stock_status', 10, 2);
function check_variation_stock_status($active, $variation) {
    $stock = $variation->get_stock_quantity();
    $in_stock = $variation->is_in_stock();
    error_log('Вариация ID ' . $variation->get_id() . ' - в наличии: ' . ($in_stock ? 'да' : 'нет') . ', кол-во: ' . $stock);
    return $active;
}

После этого проверьте логи, чтобы понять, какие варианты фактически отсутствуют.

Пошаговое решение: автоматическое отключение отсутствующих вариантов

Задача — чтобы WooCommerce автоматически снимал с продажи варианты товаров, которых нет в наличии, скрывая их из выбора на фронтенде.

Шаг 1. Добавьте функцию для фильтрации вариантов

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

add_filter('woocommerce_variation_is_active', 'disable_out_of_stock_variations', 10, 2);
function disable_out_of_stock_variations($active, $variation) {
    if (!$variation->is_in_stock()) {
        return false; // Отключаем вариант, если нет в наличии
    }
    return $active;
}

Этот фильтр отключит варианты, если они отсутствуют на складе (stock quantity <= 0 или статус "нет в наличии").

Шаг 2. Очистка кэша и обновление атрибутов

После добавления кода очистите кэш сайта и браузера, чтобы изменения вступили в силу. Также рекомендуется пересохранить вариативные товары в админке, чтобы WooCommerce обновил внутренние данные.

Шаг 3. Тестирование на фронтенде

Откройте страницу вариативного товара и проверьте список вариантов. Варианты без наличия должны исчезнуть из выпадающих списков выбора.

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

  • Варианты с нулевым или отрицательным количеством отсутствуют в селекторах на странице товара;
  • В админке вариации с нулевым stock остаются, но не активны для клиентов;
  • Попытка доступа к URL варианта без наличия ведёт к перенаправлению на основной товар или 404.

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

Ошибка 1: Варианты с нулевым запасом видны покупателям

Причина: в настройках WooCommerce отключена опция "Скрывать отсутствующие товары" или используется кэш, не обновлённый после изменения.

Решение: Проверьте в WooCommerce > Настройки > Товары > Запасы, чтобы включить скрытие отсутствующих товаров. Очистите кэш.

Ошибка 2: Фильтр не работает для некоторых вариантов

Причина: нестандартные способы управления запасами (например, сторонние плагины или кастомные поля).

Решение: Удостоверьтесь, что в $variation->is_in_stock() возвращается корректное значение. Возможно, потребуется доработать фильтр с учётом специфики плагинов.

Ошибка 3: Варианты отображаются, но недоступны для выбора

Это штатное поведение WooCommerce, если вариант отключён не полностью. Наш фильтр решает эту проблему.

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

  • Добавляйте фильтры и кастомный код в дочернюю тему или плагин, чтобы не потерять изменения при обновлении;
  • Проверяйте совместимость с плагинами кэширования: иногда кэш может показывать устаревшие данные о вариантах;
  • Регулярно обновляйте WooCommerce и PHP до последних стабильных версий для безопасности и производительности;
  • Используйте логи и дебаг для выявления проблем с наличием товаров;
  • Для крупных магазинов с тысячами товаров рассмотрите использование специализированных решений для управления запасами и загрузкой (например, ElasticPress).

Сравнение вариантов решения

МетодПлюсыМинусы
Встроенная настройка WooCommerce "Скрывать отсутствующие товары"Простота, не требует кодаНе всегда скрывает варианты, только товары
Кастомный фильтр woocommerce_variation_is_activeТочный контроль, скрывает именно вариантыТребует правок в коде, возможны конфликты
Использование плагинов для управления запасамиДополнительный функционал, удобствоДополнительная нагрузка, зависимость от плагинов
WordPress: автоматический экспорт данных в Excel
18.11.2025
WooCommerce: как настроить автоматическое удаление отменённых заказов с логированием
07.06.2026
WooCommerce: автоматическое удаление отменённых заказов с помощью хуков
15.05.2026
WooCommerce: как автоматически удалять отменённые заказы и товары из них
28.04.2026
WordPress: как удалить ненужные мета данные из head без плагинов
15.12.2025

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