如何阻止WooCommerce BACS支付订单变更状态时扣减库存
解决WooCommerce BACS支付订单状态变更时的库存扣减问题
原代码存在两个问题:一是has_status()方法的参数使用错误(多状态需传入数组而非多个独立参数);二是逻辑仅覆盖了on-hold和processing状态,未包含completed、pending payment等状态变更场景。
以下是两种解决方案,按需选择:
方案1:全局阻止BACS订单的库存扣减
只要是BACS支付的订单,无论状态如何变更,全程不扣减库存:
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_bacs_order_stock', 10, 2 ); function wcs_do_not_reduce_bacs_order_stock( $reduce_stock, $order ) { // 检查订单支付方式是否为BACS if ( 'bacs' === $order->get_payment_method() ) { $reduce_stock = false; } return $reduce_stock; }
方案2:针对指定状态阻止BACS订单的库存扣减
仅当BACS订单处于你指定的状态时,才阻止库存扣减:
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_selected_status_bacs_stock', 10, 2 ); function wcs_do_not_reduce_selected_status_bacs_stock( $reduce_stock, $order ) { // 定义需要阻止库存扣减的状态数组 $block_statuses = ['on-hold', 'processing', 'completed', 'pending']; // 同时满足BACS支付和目标状态时,阻止库存扣减 if ( 'bacs' === $order->get_payment_method() && $order->has_status( $block_statuses ) ) { $reduce_stock = false; } return $reduce_stock; }
内容的提问来源于stack exchange,提问作者jamesnelson82
相关产品推荐
相关产品推荐

