我正在为客户开发一些定制的Woocommerce功能 . 他们使用BACS支付网关处理人工付款 .
然而,网关目前为了我们的需要而过早地减少库存,即,当订单是“暂停”时 . 当订单标记为“处理”或“完成”时,我只想减少库存(避免重复减少) .
我已经设法防止股票在“暂停”时使用以下代码段自行减少:
function wcs_do_not_reduce_onhold_stock( $reduce_stock, $order ) {
if ( $order->has_status( 'on-hold' ) ) {
$reduce_stock = false;
}
return $reduce_stock;
}
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_onhold_stock', 10, 2 );
我不太确定如何继续 . 虽然上面的代码有效,但添加以下条件不会:
else if ( $order->has_status( 'processing' ) || $order->has_status( 'completed' ) ) {
$reduce_stock = true;
}
简而言之,我最好根据以下库存状态来改变库存:
-
暂停 - 什么都不做
-
已完成或正在处理 - 减少库存(仅一次)
-
已取消 - 增加库存(仅在最初减少时)
任何帮助深表感谢!
1 回答
使用 woocommerce_order_status_changed 中挂钩的自定义函数,您将能够定位'processing'和'completed'订单状态更改减少订单商品库存 .
我已在您的功能中添加了一个条件,仅在订单上定位“BACS”支付网关 .
代码位于活动子主题(或活动主题)的function.php文件中 .
经过测试和工作