Автоматическое отключение варианта товара WooCommerce при нулевом запасе

Диагностика проблемы: почему варианты товаров с нулевым запасом остаются активными

В стандартной настройке WooCommerce варианты товаров с нулевым запасом могут оставаться видимыми и доступными для покупки, если не включена опция управления запасом на уровне варианта. Это приводит к негативному пользовательскому опыту и ошибкам при оформлении заказа.

Для проверки текущего состояния:

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

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

1. Включите управление запасом для вариаций

Включите опцию "Управление запасом" для каждого варианта товара в разделе редактирования вариаций. Это базовое требование для автоматического контроля наличия.

2. Настройте WooCommerce

В WooCommerce > Настройки > Товары > Запасы убедитесь, что опция "Включить управление запасом" активна.

3. Добавьте код для автоматического отключения варианта при нулевом запасе

Если по каким-то причинам варианты с нулевым запасом все еще отображаются, можно добавить следующий код в файл functions.php активной темы или в плагин для кастомных функций:

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

Этот фильтр проверяет, есть ли запас у варианта, и если запаса нет, скрывает вариант на фронтенде.

Проверка результата после внедрения

  • Очистите кеш сайта и браузера.
  • Перейдите на страницу товара с вариациями.
  • Убедитесь, что варианты с запасом 0 не отображаются в селекторе вариаций.
  • Попробуйте оформить заказ с такими вариантами — они должны быть недоступны.

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

  • Ошибка: Варианты с нулевым запасом по-прежнему видны.
    Причина: Управление запасом не включено для варианта.
    Исправление: Включите управление запасом в настройках варианта.
  • Ошибка: Код не работает после добавления.
    Причина: Кэширование или ошибки в файле functions.php.
    Исправление: Проверьте логи ошибок, отключите кэширование, убедитесь, что код добавлен корректно.
  • Ошибка: Варианты с запасом отображаются, но недоступны для выбора.
    Причина: Конфликт с темой или плагинами, которые изменяют поведение вариаций.
    Исправление: Отключите плагины по очереди для диагностики, проверьте совместимость темы.

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

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

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

МетодОписаниеПлюсыМинусы
Включение управления запасомСтандартная настройка WooCommerceПростота, поддерживается ядромТребует ручной настройки каждого варианта
Кастомный фильтр woocommerce_variation_is_activeАвтоматическая фильтрация вариантов с 0 на фронтендеПолный контроль, работает для всех вариантовНужны навыки PHP, может конфликтовать с плагинами
Плагины для управления запасомСпециализированные расширения WooCommerceДополнительный функционал, удобствоНагрузка на сайт, возможны конфликты, требует лицензии

Пример расширенного кода для уведомления администратора о нулевом запасе

add_action('woocommerce_variation_set_stock', 'notify_admin_when_stock_zero', 10, 1);
function notify_admin_when_stock_zero($variation) {
    if($variation->get_stock_quantity() === 0) {
        $admin_email = get_option('admin_email');
        $subject = 'Вариант товара отсутствует на складе';
        $message = 'Вариант "' . $variation->get_name() . '" (ID: ' . $variation->get_id() . ') имеет нулевой запас.';
        wp_mail($admin_email, $subject, $message);
    }
}
Исключение товаров WooCommerce по атрибуту из поиска и категорий
23.06.2026
Автоматическое удаление старых Post Meta в WordPress: практическое руководство
08.04.2026
Как исключить товары и варианты WooCommerce из корзины и оформления заказа по атрибуту
31.05.2026
Как использовать WooCommerce REST API для управления товарами в WordPress
14.02.2026
Как удалить зависшие задачи в WP-Cron WordPress
19.03.2026