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

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

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

Цель — автоматически отключать варианты товаров (вариации) при отсутствии запаса, чтобы покупатель не мог их выбрать или добавить в корзину.

Пошаговое решение: реализация через функции темы

1. Проверка наличия вариации и запаса

Для начала нужно убедиться, что WooCommerce контролирует запас и что для вариаций корректно установлен параметр управления запасом. Если вариация закончилась, она должна становиться недоступной.

2. Отключение вариации в выпадающем списке выбора

Добавим фильтр, который будет делать варианты с нулевым запасом недоступными в выпадающем списке выбора вариаций.

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;
}

Этот код проверяет наличие товара на складе и отключает вариант, если его нет в наличии.

3. Запрет добавления в корзину недоступных вариаций

Иногда вариант может остаться доступным из-за кэша или других настроек. Чтобы гарантировать отсутствие возможности добавить товар без запаса в корзину, добавим проверку при добавлении:

add_filter('woocommerce_add_to_cart_validation', 'prevent_adding_out_of_stock_variations', 10, 3);
function prevent_adding_out_of_stock_variations($passed, $product_id, $quantity) {
    $product = wc_get_product($product_id);
    if ($product && !$product->is_in_stock()) {
        wc_add_notice(__('Этот вариант товара отсутствует на складе и не может быть добавлен в корзину.'), 'error');
        return false;
    }
    return $passed;
}

4. Очистка кэша и проверка работы

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

Как проверить, что решение сработало

  1. Перейдите на страницу товара с вариациями.
  2. Убедитесь, что варианты без запаса отображаются как отключённые (серые, не кликабельные) или отсутствуют в списке выбора.
  3. Попробуйте вручную добавить вариант с нулевым запасом в корзину — должна появиться ошибка и операция должна быть отменена.
  4. Проверьте оформление заказа, чтобы убедиться, что недоступные варианты не могут быть заказаны.

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

  • Вариации не отключаются в списке выбора: проверьте, что в настройках WooCommerce включён контроль запаса (WooCommerce > Настройки > Товары > Запас). Без управления запасом код не сработает.
  • Вариации отображаются, но можно добавить в корзину: возможно, кэш страницы не очищен, либо конфликт с плагинами, которые управляют корзиной. Попробуйте временно отключить плагины кэширования и проверить снова.
  • Код не срабатывает для некоторых типов товаров: убедитесь, что вы работаете именно с вариациями типа 'variation', а не с простыми товарами.

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

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

Сравнение подходов: плагин vs код

МетодПреимуществаНедостатки
Код в темеЛегко кастомизировать, без лишних плагинов, контроль на уровне кодаТребует навыков разработки, возможны ошибки при обновлениях
Плагин (например, WP Out of Stock Manager)Простой в использовании, готовые настройки, поддержкаДополнительная нагрузка, может конфликтовать с другими плагинами
WooCommerce: автоматическое отключение вариантов доставки при отсутствии товаров на складе
11.05.2026
Как отключить и удалить pings (pingbacks и trackbacks) в WordPress для защиты от спама
06.03.2026
Как удалить черновики в WordPress без плагинов
22.01.2026
WooCommerce: автоматическое изменение цены товара при изменении количества
01.07.2026
Как создать автоматический импорт контента из внешнего источника в WordPress
26.02.2026