WooCommerce:禁用订单从on-hold自动转processing无效,求助
解决WooCommerce订单自动从on-hold变processing的问题
我来帮你搞定这个问题!你写的代码之所以没生效,核心原因是过滤器注册时声明的参数数量和函数实际接收的参数不匹配,WooCommerce没法正确调用你的函数。
问题拆解
你用add_filter注册时,第四个参数填了3(表示这个过滤器要传递3个参数),但你的disable_auto_order_status函数只写了2个参数,这就导致函数无法被正确触发,自然没法改变订单状态的逻辑。另外,原过滤器的第一个参数是单个状态值,不是数组,变量名也可以更精准些。
修正后的可用代码
add_filter( 'woocommerce_payment_complete_order_status', 'disable_auto_order_status', 10, 3 ); function disable_auto_order_status( $status, $order_id, $order ) { // 强制返回on-hold状态,阻止支付完成后自动转processing return 'on-hold'; }
额外保障(可选)
如果你的店铺里还有其他可能触发状态变更的场景(比如某些支付网关的特殊逻辑、手动操作误改等),可以再加一段代码来彻底锁定订单状态:
add_action( 'woocommerce_order_status_changed', 'lock_order_to_on_hold', 10, 4 ); function lock_order_to_on_hold( $order_id, $old_status, $new_status, $order ) { // 只要新状态不是on-hold,就强制改回去 if ( $new_status !== 'on-hold' ) { $order->update_status( 'on-hold', '系统强制锁定订单状态为待支付', true ); } }
把这两段代码加到你的主题functions.php文件或者自定义插件里,就能解决问题啦。
内容的提问来源于stack exchange,提问作者林煌木
相关产品推荐
相关产品推荐

