Управление запасами WooCommerce кажется простой задачей, пока магазин небольшой: указали количество товара, включили учёт и начали принимать заказы. Проблемы обычно появляются позже — когда одновременно оформляют несколько заказов, есть вариации, неоплаченные корзины, импорт из учётной системы и товары, которые разрешено продавать под заказ.
Чтобы не получить пересорт, важно понимать, какие настройки отвечают за фактическое количество, когда WooCommerce резервирует товар и чем backorder отличается от обычного статуса «нет в наличии». Ниже — практическая схема настройки и диагностики.
Что именно WooCommerce умеет учитывать штатно
В разделе WooCommerce → Settings → Products → Inventory включается глобальный Manage stock. По официальной документации после его включения WooCommerce ведёт количественный остаток и уменьшает его при продажах, а при возврате может вернуть единицы обратно в доступный запас.
Если количественный учёт выключен, магазин работает только со статусами In stock, Out of stock и On backorder. Это подходит для услуг или каталога, где точное число единиц не важно, но плохо подходит для ограниченного физического склада.
Глобальный Manage stock и настройка конкретного товара
Глобальное включение складского учёта ещё не означает, что каждый товар уже считает остаток. В карточке товара нужно проверить раздел Inventory. Для простого товара там задаются SKU, включение stock management, Quantity, backorders и индивидуальный low stock threshold.
SKU должен быть уникальным. Для интеграций с ERP, CRM или поставщиком именно стабильный SKU часто удобнее использовать как внешний ключ, чем название товара: название маркетинг может поменять, а идентификатор склада должен оставаться однозначным.
Hold stock: зачем WooCommerce резервирует неоплаченный заказ
Настройка Hold stock (minutes) определяет, сколько времени товар удерживается за заказом со статусом Pending payment. Когда срок заканчивается, такой заказ отменяется, а зарезервированный остаток возвращается в доступное количество.
Это защищает от ситуации, когда один покупатель начал оплату последней единицы, а другой в ту же минуту пытается купить её повторно. Но слишком большой срок может искусственно скрывать товар от реальных покупателей, если много заказов создаётся и не оплачивается.
Важно: по документации Hold stock относится именно к Pending payment, а не к заказам On hold. Поэтому при нестандартном платёжном шлюзе сначала нужно проверить, какие статусы он реально выставляет.
Backorders: продажа товара при нулевом остатке
Если включён количественный учёт, WooCommerce предлагает три режима: запретить backorders, разрешить их с уведомлением покупателя или разрешить без отдельного уведомления. Режим нужно выбирать не технически, а исходя из реальной логистики.
- Do not allow — подходит, если продать можно только физически имеющийся товар.
- Allow, but notify customer — подходит для товара под заказ, когда покупатель должен понимать, что срок доставки увеличится.
- Allow — допустим, когда backorder является нормальной частью процесса и отдельное предупреждение не требуется.
Если магазин синхронизируется с внешним складом, разрешение backorders не должно маскировать ошибки синхронизации. Нулевой остаток из-за сломанного импорта и нулевой остаток товара, который действительно можно заказать у поставщика, — разные бизнес-сценарии.
Low stock и Out of stock: пороги как раннее предупреждение
В глобальных настройках можно включить уведомления о низком и нулевом остатке и задать получателей. Порог Low stock threshold определяет, при каком количестве товар считается заканчивающимся. Для отдельных товаров порог можно переопределить.
Для магазина это простой способ заметить проблему до полного обнуления. Если товар продаётся быстро или поставляется долго, порог должен учитывать скорость продаж и срок пополнения, а не быть одинаковым для всего каталога.
Вариативные товары: где хранить остаток
У вариативных товаров WooCommerce позволяет управлять запасом на уровне родительского товара, на уровне отдельных вариаций или сочетать эти подходы в зависимости от структуры каталога. Если размер S и XL физически являются разными складскими позициями, логичнее вести количество по вариациям.
Типичная ошибка — обновлять общий остаток родителя, когда реальный склад присылает количество по SKU вариаций. В результате на витрине товар выглядит доступным, но конкретная комбинация уже закончилась.
Как избежать пересорта при импорте и синхронизации
Если остатки приходят из CSV, ERP или внешнего API, нужно заранее определить один источник истины. Нельзя одновременно разрешать менеджеру вручную менять Quantity в WordPress и каждые десять минут безусловно перезаписывать его старым значением из внешней системы.
Для CSV-обновлений полезно использовать стабильные идентификаторы и сначала тестировать небольшой набор товаров. Подробнее этот сценарий разобран в статье об импорте товаров WooCommerce из CSV без дублей.
Для API-интеграции обычно нужен журнал обмена: какой SKU пришёл, какой остаток был до обновления, какое значение записано и какой ответ вернул WooCommerce. Тогда расхождение можно расследовать, а не угадывать.
Что проверять, если остаток «сам меняется»
- Проверить, включён ли глобальный и товарный Manage stock.
- Проверить историю заказов и их статусы.
- Посмотреть, не удерживается ли количество в Pending payment.
- Проверить backorder policy.
- Для вариативного товара сверить родителя и каждую вариацию.
- Проверить импорты, webhooks, ERP/CRM и фоновые задания.
- Посмотреть WooCommerce logs и журнал внешней интеграции.
Если обмен выполняется в фоне и задерживается, отдельно стоит проверить WP-Cron и Action Scheduler в WooCommerce. Складская ошибка иногда оказывается не ошибкой формулы, а зависшей очередью.
Контрольный сценарий перед запуском магазина
Создайте тестовый товар с небольшим количеством, например 3 единицы. Оформите заказ на одну единицу, проверьте уменьшение доступного количества, затем протестируйте неоплаченный заказ и возврат резерва после заданного Hold stock. После этого отдельно проверьте нулевой остаток с запрещённым и разрешённым backorder.
Для вариативного товара повторите тест на двух SKU. Если есть внешняя синхронизация, проведите тот же цикл после обновления через API или импорт. Такой тест быстро показывает, где расходятся ожидания бизнеса и фактическая логика сайта.
Когда штатных настроек уже недостаточно
Стандартного WooCommerce хватает для базового склада. Кастомная логика нужна, когда появляются несколько складов, резервирование по филиалам, поставщики с разными сроками, предзаказы, синхронизация с учётной системой или сложные правила доступности.
В таких проектах лучше не наслаивать несколько плагинов, каждый из которых по-своему меняет stock status. Сначала описывается источник истины и жизненный цикл остатка, затем выбирается архитектура интеграции. A.S Groups занимается разработкой и доработкой WooCommerce, включая API-синхронизации и диагностику складской логики.
Итог
Надёжный учёт запасов WooCommerce строится вокруг пяти вещей: количественного Manage stock, понятного Hold stock, осознанной политики backorders, корректного уровня учёта вариаций и единого источника данных для внешней синхронизации. Если эти правила согласованы, большинство проблем с пересортом можно диагностировать системно.
Если остатки уже расходятся между сайтом и учётной системой, можно прислать описание текущей схемы: разберу, где возникает расхождение и какой слой нужно исправлять.
Обсуждение
Вопросы и комментарии
Можно уточнить детали статьи или поделиться своим опытом. Первый комментарий проходит проверку.