我在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 );
但不幸的是不起作用。有别的办法解决这个问题吗?
库存已经减少"on-hold">,"processing">和"completed">如您所见,在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}
是一个复合钩子,可以与任何其他自定义订单状态一起使用。
对于任何自定义订单状态(比如"shipped"例如),我们将使用:
add_action( 'woocommerce_order_status_shipped', 'wc_maybe_reduce_stock_levels' );
代码放在活动子主题(或活动主题)的functions.php文件中。应该可以。