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

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

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

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

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

Настройка управления запасами WooCommerce

  1. В админке WordPress перейдите в WooCommerce → Настройки → Товары → Запасы.
  2. Убедитесь, что включена галочка "Включить управление запасами".
  3. Отключите опцию "Разрешить покупку при отсутствии товара", чтобы ограничить продажу товаров с нулевым остатком.

Добавление кастомного кода для автоматического отключения товаров

Для удобства можно добавить код, который будет менять статус товара на "черновик" при достижении нулевого остатка и обратно активировать, если товар снова появился в наличии.

add_action('woocommerce_reduce_stock', 'auto_disable_out_of_stock_products', 10, 1);
add_action('woocommerce_restore_order_stock', 'auto_enable_in_stock_products', 10, 1);

function auto_disable_out_of_stock_products($order) {
    foreach ($order->get_items() as $item) {
        $product = wc_get_product($item->get_product_id());
        if ($product->managing_stock() && $product->get_stock_quantity() <= 0) {
            $product->set_status('draft');
            $product->save();
        }
    }
}

function auto_enable_in_stock_products($order) {
    foreach ($order->get_items() as $item) {
        $product = wc_get_product($item->get_product_id());
        if ($product->managing_stock() && $product->get_stock_quantity() > 0 && $product->get_status() === 'draft') {
            $product->set_status('publish');
            $product->save();
        }
    }
}

Этот код отслеживает изменение запасов при оформлении или отмене заказа и меняет статус товара.

Очистка и кэширование

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

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

  • Создайте тестовый товар с управлением запасами, установите количество 1.
  • Оформите заказ на этот товар, что уменьшит его количество до 0.
  • Проверьте, что статус товара изменился на черновик и товар исчез из каталога.
  • Отмените или удалите заказ, чтобы восстановить запас, и убедитесь, что товар снова стал опубликован.

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

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

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

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

Сравнение способов реализации автоматического отключения товаров

МетодПлюсыМинусы
Настройки WooCommerce (запрет покупки при 0)Просто настроить, работает из коробкиТовар остается видимым, только покупка запрещена
Кастомный код смены статуса (как в статье)Автоматически скрывает товар, улучшает UXТребуется тестирование, может не работать с вариациями
Плагины управления запасамиРасширенный функционал, поддержка вариацийМогут быть платными, влияют на производительность
⭐⭐⭐⭐⭐