我正在 WooCommerce 上管理我的库存。
当订单状态更改为特定状态(例如(待处理))或其他状态时,我想减少库存。
所以我使用了这段代码:
function manageStock ($order_id, $old_status, $new_status, $instance ) {
if ($old_status === 'on-hold'){
wc_reduce_stock_levels($order_id);
}
}
add_action( 'woocommerce_order_status_changed', 'manageStock', 10, 4 );
但不幸的是不起作用。还有其他方法可以解决这个问题吗?
“暂停”、“正在处理” 和 “已完成” 订单状态的库存已经减少,如您所见 对于
wc_maybe_reduce_stock_levels()
函数源代码,将该函数挂接到以下挂钩:
add_action( 'woocommerce_payment_complete', 'wc_maybe_reduce_stock_levels' );
add_action( 'woocommerce_order_status_completed', 'wc_maybe_reduce_stock_levels' );
add_action( 'woocommerce_order_status_processing', 'wc_maybe_reduce_stock_levels' );
add_action( 'woocommerce_order_status_on-hold', 'wc_maybe_reduce_stock_levels' );
所以不要直接使用
wc_reduce_stock_levels()
,而是用wc_maybe_reduce_stock_levels()
代替。
但是在 WooCommerce pending 订单状态下,会触发
wc_maybe_increase_stock_levels()
功能,从而增加库存水平,因此我们需要首先删除该行为。
现在要允许减少“待处理”订单状态的库存,请添加以下代码行:
add_action('init', function() {
remove_action( 'woocommerce_order_status_pending', 'wc_maybe_increase_stock_levels' );
add_action( 'woocommerce_order_status_pending', 'wc_maybe_reduce_stock_levels' );
});
代码位于活动子主题(或活动主题)的functions.php 文件中。应该可以。
请注意,因此,对于任何
woocommerce_order_status_{$status_transition_to}
是一个复合钩子,可与任何其他自定义订单状态一起使用。
自定义订单状态(例如“已发货”),我们将使用:
add_action( 'woocommerce_order_status_shipped', 'wc_maybe_reduce_stock_levels' );
代码位于活动子主题(或活动主题)的functions.php 文件中。应该可以。
什么情况下有人付款,状态直接从“正在处理付款”开始,还能减少库存吗?
这就是我需要的,这就是我问的原因。
感谢您提前回复