Con*_*ell 4 php wordpress stock orders woocommerce
我正在为客户开发一些自定义 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 );
Run Code Online (Sandbox Code Playgroud)
我不太确定如何继续。虽然上述代码有效,但添加以下条件无效:
else if ( $order->has_status( 'processing' ) || $order->has_status( 'completed' ) ) {
$reduce_stock = true;
}
Run Code Online (Sandbox Code Playgroud)
简而言之,我希望库存根据以下库存状态发生变化:
任何帮助深表感谢!
使用挂钩的自定义功能,woocommerce_order_status_changed您将能够针对“正在处理”和“已完成”订单状态更改减少订单项目库存。
我在您的函数中添加了一个条件,仅针对订单上的“BACS”支付网关。
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_onhold_stock', 10, 2 );
function wcs_do_not_reduce_onhold_stock( $reduce_stock, $order ) {
if ( $order->has_status( 'on-hold' ) && $order->get_payment_method() == 'bacs' ) {
$reduce_stock = false;
}
return $reduce_stock;
}
add_action( 'woocommerce_order_status_changed', 'order_stock_reduction_based_on_status', 20, 4 );
function order_stock_reduction_based_on_status( $order_id, $old_status, $new_status, $order ){
// Only for 'processing' and 'completed' order statuses change
if ( $new_status == 'processing' || $new_status == 'completed' ){
$stock_reduced = get_post_meta( $order_id, '_order_stock_reduced', true );
if( empty($stock_reduced) && $order->get_payment_method() == 'bacs' ){
wc_reduce_stock_levels($order_id);
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码位于活动子主题(或活动主题)的 function.php 文件中。
测试和工作
| 归档时间: |
|
| 查看次数: |
4076 次 |
| 最近记录: |