wpcat.ru wordpress WPCat.ru

Автоматическая смена статуса наличия товара в WooCommerce на «Нет в наличии» при отсутствии на складе

Проблема: статус товара не обновляется при отсутствии на складе

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

Диагностика проблемы

  • Проверьте, что у товара установлен правильный уровень запасов (Stock Quantity).
  • Убедитесь, что в настройках WooCommerce включено управление запасами: WooCommerce > Настройки > Товары > Управление запасами.
  • Проверьте, не отключена ли опция «Разрешить заказы при отсутствии товара» (Allow backorders) для товара.
  • Посмотрите, изменяется ли статус товара вручную через админку при изменении количества.

Пошаговое решение: автоматическое обновление статуса наличия

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

add_action('woocommerce_product_set_stock', 'update_stock_status_automatically', 10, 1);function update_stock_status_automatically($product) {    if (!$product->managing_stock()) {        return;    }    $stock_quantity = $product->get_stock_quantity();    if ($stock_quantity <= 0) {        $product->set_stock_status('outofstock');    } else {        $product->set_stock_status('instock');    }    $product->save();}

Объяснение кода:

  • woocommerce_product_set_stock — хук вызывается при изменении количества товара.
  • Функция проверяет, управляется ли запасами товар.
  • Если количество меньше или равно нулю, статус меняется на outofstock.
  • Иначе — на instock.
  • В конце вызывается метод save() для сохранения изменений.

Обработка вариативных товаров

Для вариативных товаров можно добавить аналогичный обработчик для каждой вариации:

add_action('woocommerce_variation_set_stock', 'update_variation_stock_status', 10, 1);function update_variation_stock_status($variation) {    if (!$variation->managing_stock()) {        return;    }    $stock_quantity = $variation->get_stock_quantity();    if ($stock_quantity <= 0) {        $variation->set_stock_status('outofstock');    } else {        $variation->set_stock_status('instock');    }    $variation->save();}

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

  1. Измените количество товара в админке на 0 или меньше.
  2. Перейдите на страницу товара на фронтенде.
  3. Проверьте, что статус товара отображается как «Нет в наличии».
  4. Увеличьте количество, например до 5.
  5. Обновите страницу и убедитесь, что статус изменился обратно на «В наличии».

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

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

  • Код не работает для вариаций: убедитесь, что добавлен обработчик для вариаций woocommerce_variation_set_stock.
  • Статус не обновляется на фронтенде: проверьте, не кэшируется ли страница и не конфликтуют ли плагины кэширования.
  • Разрешены заказы при отсутствии товара: в настройках товара отключите «Разрешить заказы при отсутствии товара» (Backorders).
  • Код вызывает ошибки PHP: проверьте синтаксис, используйте отладчик или логи ошибок сервера.

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

  • Добавляйте код в дочернюю тему или собственный плагин, чтобы избежать потери при обновлениях.
  • Используйте проверку managing_stock(), чтобы код не выполнялся на товарах без управления запасами.
  • Минимизируйте работу с базой данных, вызывая save() только при изменении статуса.
  • При большом количестве товаров и частых изменениях запасов рассмотрите интеграцию с внешней системой складского учета через REST API.

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

ВариантПлюсыМинусы
Ручное изменение статусаПростотаЧеловеческий фактор, ошибки, время
Плагин управления запасамиАвтоматизация, поддержкаЗависимость от плагина, нагрузка
Код в functions.php (наш способ)Легковесность, контроль, отсутствие новых плагиновТребует навыков, возможны ошибки в коде
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше