После тщательного прочтения исходного кода WooCommerce я думаю, что вы можете воссоздать проблему, если у вас есть два компьютера.
Рассмотрим продукт P с количеством запаса, равным 1. Есть 2 разных клиента A и B. КлиентА кладет продукт Р в свою корзину.Перед тем, как покупатель А разместит свой заказ, покупатель Б положит товар Р в свою корзину.Затем клиент A размещает свой заказ, уменьшая количество запаса продукта P до 0. Затем клиент B размещает свой заказ, уменьшая количество запаса продукта P до -1.К сожалению, для проверки этого требуется два компьютера (или два браузера), так как вам нужно два одновременно авторизованных клиента.У меня только один компьютер, и я не хочу устанавливать другой браузер.
Проблема в функции WC_Cart :: add_to_cart ().Он вызывает WC_Product :: has_enough_stock () со ссылками только на количество товара на складе и количество, заказанное в его корзине.Он не учитывает количество продукта, которое существует в других тележках.На самом деле WooCommerce должна быть способна добиться большего успеха, поскольку она знает содержимое корзины покупателя A, когда покупатель B добавляет продукт P в свою корзину A.
Конечно, здесь есть небольшая дилемма, потому что если WooCommerceне позволяет покупателю B добавить продукт P в свою корзину, поскольку покупатель A имеет его в своей корзине, а покупатель A фактически не размещает заказ, тогда компания может потерять продажу.
В противном случае WooCommerce может отклонить заказы B покупателя.заказ, когда B размещает заказ, но если я что-то пропустил, я не видел никакого кода для этого.Мне кажется, это разумное решение.