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

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

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

Чтобы проверить, есть ли у вас такая проблема, перейдите в админку WordPress > WooCommerce > Продукты и отфильтруйте товары по наличию (складской статус). Если товары с нулевым остатком отображаются как доступные для покупки, значит автоматическое отключение не работает.

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

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

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

Если стандартных настроек недостаточно или вы хотите дополнительно скрывать такие товары из каталога, используйте следующий подход с кодом. Он автоматически переводит товар в статус "Черновик" при достижении нулевого остатка.

add_action('woocommerce_reduce_order_stock', 'auto_disable_product_on_zero_stock', 10, 1); 
function auto_disable_product_on_zero_stock($order) {
    foreach($order->get_items() as $item) {
        $product = $item->get_product();
        if(!$product) continue;
        $stock_quantity = $product->get_stock_quantity();
        if($stock_quantity === 0) {
            // меняем статус на черновик, чтобы скрыть товар
            $product_id = $product->get_id();
            wp_update_post(array(
                'ID' => $product_id,
                'post_status' => 'draft'
            ));
        }
    }
}

Этот хук срабатывает после уменьшения запасов при оформлении заказа и отключает товары с нулевым остатком.

Дополнительный код для обратного включения товара при пополнении запасов

add_action('woocommerce_product_set_stock_status', 'auto_enable_product_on_stock', 10, 3);
function auto_enable_product_on_stock($product_id, $stock_status, $product) {
    if('instock' === $stock_status) {
        $post = get_post($product_id);
        if($post->post_status === 'draft') {
            wp_update_post(array(
                'ID' => $product_id,
                'post_status' => 'publish'
            ));
        }
    }
}

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

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

  1. Создайте тестовый товар с ограниченным запасом (например, 1 шт).
  2. Оформите заказ, который уменьшит запас до 0.
  3. Проверьте в админке, что товар сменил статус на "Черновик" и исчез из каталога.
  4. Пополните запас товара вручную и убедитесь, что он снова появляется (статус "Опубликовано").

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

  • Хук не срабатывает: Убедитесь, что код добавлен в functions.php темы или в плагин, который активен. Проверьте, что WooCommerce активен.
  • Товары не скрываются из каталога: Статус должен быть именно draft или private. Статус outofstock лишь помечает товар, но не скрывает.
  • Проблемы с кэшированием: Если используется кэш (например, плагин кеширования или CDN), очистите его после изменения статуса товара.
  • Права пользователя: Для обновления статуса выполняемый код должен иметь права администратора. В стандартной среде темы это работает без проблем.

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

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

Сравнение подходов автоматического отключения товаров

МетодОписаниеПлюсыМинусы
Стандартные настройки WooCommerceЗапрет заказов при отсутствии на складеПростая настройка без кодаТовары остаются в каталоге, могут вводить в заблуждение
Изменение статуса товара на "Черновик" через хукАвтоматическое отключение товаров с нулевым запасомТовары полностью скрываются из каталога и поисковиковТребует кастомного кода, возможны проблемы с кэшированием
Использование плагинов (например, Clearfy Pro)Автоматизация управления запасами и видимостью товаровДополнительные функции, удобный интерфейсПлатное решение, нагрузка на сайт
Автоматическое изменение стоимости товаров в WooCommerce при снижении остатка на складе
13.05.2026
Миграция пользователей между сайтами WordPress: пошаговое руководство с примерами кода
26.12.2025
Как избежать конфликтов между плагинами WordPress: практические решения
05.12.2025
Как создать динамические табличные каталоги в WordPress с помощью шорткода
17.04.2026
Как использовать метод AJAX в WooCommerce для обновления корзины без перезагрузки
05.05.2026