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

Php 如何减少WooCommerce中特定订单状态的库存,php,wordpress,woocommerce,orders,stock,Php,Wordpress,Woocommerce,Orders,Stock,我正在管理我的股票 我希望在订单状态更改为特定状态(例如(待定)或其他状态时减少库存 所以我用了这个代码: 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_ch

我正在管理我的股票

我希望在订单状态更改为特定状态(例如(待定)或其他状态时减少库存

所以我用了这个代码:

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 );

但不幸的是,这不起作用。是否有其他方法可以解决此问题?

库存已经减少,如您所见,“暂停”“处理”“完成”订单状态,将功能挂接到以下挂钩:

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\u reduce\u stock\u levels()
并用
wc\u maybe\u reduce\u stock\u levels()替换

但是在WooCommerce待定订单状态下,会触发增加库存水平的函数
wc\u maybe\u increase\u stock\u 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文件。它应该会起作用

请注意,
woocmerce\u order\u status{$status\u transition\u to}
是一个复合钩子,可以与任何其他自定义订单状态一起使用

因此,对于任何自定义订单状态(例如“已发货”),我们将使用:

add_action( 'woocommerce_order_status_shipped', 'wc_maybe_reduce_stock_levels' );

代码进入活动子主题(或活动主题)的functions.php文件。应该行。

我想我不能再减少库存了,因为订单“处理”库存时已经减少了。因此,我无法减少特定状态的库存。你觉得怎么样@LoicTheAztecYes当然,如果订单在“保留”、“处理”和“完成”状态之前已经减少,您不能减少定制状态的库存。只有当它从挂起状态变为自定义状态时,才能减少它。如果这个答案回答了你的问题,你可以请你回答,如果你喜欢/想要,你也可以请你回答,谢谢。没有解决这个问题的方法@LoicTheAztec谢谢。@Zakitu我在这里的回答只是回答了你最初的问题……它显示了库存是如何根据状态减少或增加的。您可以使用remove_操作和add_操作删除WooCommerce行为并将其替换为您的行为