如何在WooCommerce中自动将on-hold订单转为processing并仅发送对应通知
WooCommerce 自动修改on-hold订单为processing状态解决方案
根因说明
原有代码挂载的woocommerce_thankyou钩子执行时机晚于WooCommerce默认的订单状态邮件触发逻辑,系统完成on-hold邮件发送后才会执行状态修改操作,因此会出现两类邮件同时发送的问题。
优化后代码
直接替换原有代码,添加到主题functions.php文件或自定义功能插件中即可生效:
add_action( 'woocommerce_order_status_on-hold', 'custom_auto_process_onhold_order', 10, 2 ); function custom_auto_process_onhold_order( $order_id, $order ) { // 移除默认的on-hold状态邮件发送动作 remove_action( 'woocommerce_order_status_on-hold_notification', [ WC()->mailer(), 'send_on_hold_order_notification' ], 10 ); // 更新订单状态为processing,可自定义备注内容 $order->update_status( 'processing', '系统自动将待确认订单转为处理中' ); // 手动触发processing状态邮件通知,兼容自定义邮件场景 do_action( 'woocommerce_order_status_processing_notification', $order_id ); }
逻辑说明
- 改用
woocommerce_order_status_on-hold钩子,会在订单进入on-hold状态的瞬间触发,执行时机早于邮件发送逻辑 - 先移除WooCommerce默认绑定的on-hold邮件发送动作,从根源上避免on-hold邮件发出
update_status方法本身会自动触发processing状态对应的邮件通知,额外添加的do_action代码用于兼容部分自定义邮件规则场景,确保邮件必发
注意事项
测试时建议使用小额测试订单验证状态变更和邮件发送逻辑,避免影响正常业务。
内容的提问来源于stack exchange,提问作者user13900862
相关产品推荐
相关产品推荐

