php - 针对特定订单状态更改禁用增加库存
问题描述
目前当订单状态发生变化时cancelled
,产品的库存增加。
我想在新状态为cancelled
但仅针对某些先前的订单状态 (不是全部)时禁用库存增加。
例如,当状态发生变化时:
- 从
processing
到cancelled
: 不增加库存 - 从
shipped
到cancelled
: 不增加库存 - 从
other-status
到cancelled
: 增加库存 - 从
cancelled
到processing
: 减少库存
到目前为止,我已经尝试过:
我尝试remove_action
了该wc_increase_stock_levels
功能,但它对我不起作用。我在哪里做错了?
解决方案
更新产品库存时无法获取之前的订单状态。这是因为该函数使用在钩子之前执行的钩子wc_maybe_increase_stock_levels
触发:woocommerce_order_status_cancelled
woocommerce_order_status_' . $status_transition['from'] . '_to_' . $status_transition['to']
woocommerce_order_status_changed
从这些钩子中,您可以获得先前和新的订单状态。
您可以通过两个步骤解决此问题:
- 禁用取消状态的库存增加(不管之前的订单状态是什么)
- 根据一个或多个先前的订单状态设置库存增加
如果您只想为将状态从“其他状态” (自定义)更改为“已取消”的订单启用库存增加,您可以使用以下代码:
替换
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。
推荐阅读
- python - 如何在函数中告诉 PyCharm 用户定义的 python dict 类型是可以的?
- spring-boot - 将 @Value 注释字段发送到 DTO 层返回 null
- python - ImportError:没有名为 bs4 的模块(MacOS)
- python - 基于分组变换数组的各个部分
- prolog - XSB 运行时错误 - MulVal
- python - 如何在熊猫数据框中使用字符串作为列名
- python-3.x - python3以安全的方式检查ldap用户名和密码
- javascript - 如何使用 node.js 读取发布请求有效负载并表达?
- mysql - MySQL/Doctrine:允许插入空字段,但不允许更新
- java - 如何使按钮对鼠标单击做出反应