如何减少 WooCommerce 中特定订单状态的库存

问题描述 投票:0回答:2

我正在 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 );

但不幸的是不起作用。还有其他方法可以解决这个问题吗?

php wordpress woocommerce orders stock
2个回答
2
投票

“暂停”“正在处理”“已完成” 订单状态的库存已经减少,如您所见 对于

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 文件中。应该可以。


0
投票
我对这种方式也有疑问。一旦我们进行此更改,据我所知,暂停订单的订单状态将不再发生变化,但当状态更改为“待付款”时,它会发生变化

什么情况下有人付款,状态直接从“正在处理付款”开始,还能减少库存吗?

这就是我需要的,这就是我问的原因。

感谢您提前回复

© www.soinside.com 2019 - 2024. All rights reserved.