Magento - 产品数量和状态的更改在 sales_order_place_after 事件中不起作用

Magento - change of product quantity and status is not working in sales_order_place_after event

我创建了一个事件来检查是否某件商品的延期交货数量大于零而不是将订购的产品数量设置为零而不是保持负数并将其状态更改为缺货但没有任何效果.

config.xml

<sales_order_place_after>
                <observers>
                    <some_random>
                        <class>My_Model_Observer</class>
                        <method>checkBackOrder</method>
                    </some_random>
                </observers>
            </sales_order_place_after>

Observer.php

public function checkBackOrder($observer)
    {
        $order = $observer->getOrder();
        $customer = $order->getCustomer();
            foreach ($order->getAllItems() as $item)
            {
                if ($item->getProductType() == 'simple') {
                    $product = Mage::getModel("catalog/product")->load($item->getProductId());

                    if ($item->getQtyBackordered() > 0) {
                        $webQty = $product->getStockItem()->getQty();
                    if ($webQty <= 0) {
                        $this->_changeStockStatus($product);
                      }
                    }
                }
            }
    }

protected function _changeStockStatus($product)
    {
        $webStockId = Mage::app()->getWebsite()->getStockId();
        $store = Mage::app()->getStore()->getStoreId();

        $stockItem = Mage::getModel('cataloginventory/stock_item')->setStoreId($store)->loadByProduct($product->getId());
        $stockItem->setData('qty', 0);
        $stockItem->setIsInStock(false)->setStockId($webStockId)->save();
    }

正如您在代码中看到的,除了尝试更改项目数量并将其状态设置为 "Out of stock" 之外,我没有做任何复杂的事情,但是当我执行此代码不会更改项目的数量或状态。

有人可以告诉我我做错了什么吗?

在花了很多时间和挖掘之后,我自己解决了这个问题。我没有使用 sales_order_place_after 观察者,而是使用了 sales_model_service_quote_submit_success,这是下订单后 magento 的最后一个观察者 运行。

这是我放置代码的地方。