首页 > 解决方案 > 针对特定订单状态更改禁用增加库存

问题描述

目前当订单状态发生变化时cancelled,产品的库存增加。

我想在新状态为cancelled仅针对某些先前的订单状态 (不是全部)时禁用库存增加。

例如,当状态发生变化时:

到目前为止,我已经尝试过:

我尝试remove_action了该wc_increase_stock_levels功能,但它对我不起作用。我在哪里做错了?

标签: phpwordpresswoocommercehook-woocommercestock

解决方案


更新产品库存时无法获取之前的订单状态。这是因为该函数使用在钩子之前执行的钩子wc_maybe_increase_stock_levels触发:woocommerce_order_status_cancelled

从这些钩子中,您可以获得先前和新的订单状态

您可以通过两个步骤解决此问题:

  1. 禁用取消状态的库存增加(不管之前的订单状态是什么)
  2. 根据一个或多个先前的订单状态设置库存增加

如果您只想为将状态从“其他状态” (自定义)更改为“已取消”的订单启用库存增加,您可以使用以下代码:

替换other-status为之前的订单状态信息(不带 wc-前缀)

add_action( 'init', 'custom_stock_increase' );
function custom_stock_increase() {
    // disable stock increase when order status changes to "canceled"
    remove_action( 'woocommerce_order_status_cancelled', 'wc_maybe_increase_stock_levels' );
    // enable stock increase when status changes from "other-status" to "canceled"
    add_action( 'woocommerce_order_status_other-status_to_cancelled', 'wc_maybe_increase_stock_levels' );
}

该代码已经过测试并且可以工作。将它添加到您的活动主题的functions.php。


推荐阅读