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

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

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

Основные причины такой проблемы:

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

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

1. Проверка и корректировка настроек WooCommerce

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

2. Обновление статуса вариаций через код

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

add_action('woocommerce_product_set_stock', 'auto_disable_variations_on_zero_stock', 10, 1);

function auto_disable_variations_on_zero_stock($product) {
    if (!$product->is_type('variable')) {
        return;
    }

    $variations = $product->get_children();
    foreach ($variations as $variation_id) {
        $variation = wc_get_product($variation_id);
        if ($variation->managing_stock() && $variation->get_stock_quantity() <= 0) {
            $variation->set_status('draft');
            $variation->save();
        } else {
            // Включаем обратно, если есть запас
            if ($variation->get_status() === 'draft') {
                $variation->set_status('publish');
                $variation->save();
            }
        }
    }
}

Этот хук срабатывает при изменении запаса у основного товара. Если вы хотите, чтобы проверка происходила при изменении запасов у каждой вариации, используйте хук woocommerce_variation_set_stock аналогичным образом.

3. Очистка кэша и обновление страницы

После внесения изменений обязательно очистите кэш сайта (если используете кеширующие плагины или серверный кэш) и браузера. Проверьте, что варианты с нулевым запасом исчезли с витрины и недоступны для выбора.

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

  • Зайдите в карточку вариативного товара на фронтенде.
  • Убедитесь, что варианты с запасом 0 не отображаются в селекторе вариаций.
  • Попробуйте изменить запас вариации на положительное число — вариант должен появиться снова.
  • В админке в разделе "Товары > Все товары > Вариации" проверьте статус варианта (должен быть "Черновик" для отсутствующих на складе и "Опубликован" для доступных).

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

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

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

  • Не меняйте статус вариаций слишком часто — это может создавать нагрузку на базу данных. Используйте WP-Cron для периодической проверки, если запасы изменяются массово.
  • Перед изменением статусов делайте резервные копии базы данных, чтобы избежать потери данных.
  • Если у вас большой магазин, рассмотрите вариант обработки изменений через пакетные задачи, а не сразу в хуках обновления запаса.

Сравнение подходов: плагин vs кастомный код

МетодПлюсыМинусыПример
Стандартные настройки WooCommerceПростота, поддержка обновленийНе всегда отключает варианты автоматическиВключить управление запасом в настройках
Плагины для управления запасомГотовые функции, UIЗависимость от стороннего кода, возможные конфликтыWooCommerce Stock Manager и др.
Кастомный код (хук + status)Контроль, гибкость, без лишних плагиновТребует навыков разработки, возможны ошибкиПример выше в статье
Как удалить неиспользуемые шорткоды в WordPress
23.01.2026
Создаем настройку для автоматического удаления спама в комментариях WordPress
30.12.2025
Как удалить зависшие meta поля в WordPress
13.03.2026
Создаем эффективный shortcode в WordPress с примерами кода
17.11.2025
Как удалить зависшие задачи WP-Cron в WordPress
06.12.2025