如何实现向管理员与客户同时发送WooCommerce On-Hold订单邮件通知
解决WooCommerce On-Hold订单邮件BCC管理员问题
我完全懂你的困惑——WooCommerce默认只给客户发On-Hold订单通知,不给管理员发确实有点反直觉,毕竟咱们得第一时间掌握订单状态才能跟进。你试过的两段代码没生效,大概率是换行符兼容性或者触发逻辑的问题,咱们一步步搞定它:
修正后的BCC代码(适配自动状态变更)
先替换你之前的代码,这段解决了换行符和钩子优先级的问题,能确保客户收到On-Hold邮件时,管理员被自动BCC:
// 向管理员BCC发送客户的On-Hold订单邮件 add_filter( 'woocommerce_email_headers', 'custom_admin_hold_order_bcc', 20, 3 ); function custom_admin_hold_order_bcc( $headers, $email_id, $order ) { // 精准匹配客户的On-Hold订单邮件ID if ( 'customer_on-hold_order' === $email_id ) { // 替换成你的管理员邮箱和名称 $admin_email = 'admin@yourstore.com'; $admin_name = '店铺管理员'; // 用PHP_EOL替代硬编码的换行符,适配不同服务器环境 $headers .= 'Bcc: ' . $admin_name . ' <' . $admin_email . '>' . PHP_EOL; } return $headers; }
为什么之前的代码失效?
- 换行符问题:
\r\n在部分Linux服务器上无法被正确解析,PHP_EOL是PHP内置的跨平台换行常量,兼容性更强 - 钩子优先级:把优先级设为20(高于默认的10),确保你的修改不会被其他主题/插件的代码覆盖
- 严格匹配:用
===做严格相等检查,避免字符串匹配时的意外错误
手动修改订单状态时触发邮件(可选)
默认情况下,手动把订单改成On-Hold时,WooCommerce不会自动发送客户的On-Hold邮件。如果你需要手动修改状态时也让管理员收到BCC,加上这段代码:
// 手动修改订单为On-Hold时,触发客户邮件并BCC管理员 add_action( 'woocommerce_order_status_on-hold', 'trigger_hold_order_email_on_manual_change', 10, 2 ); function trigger_hold_order_email_on_manual_change( $order_id, $order ) { // 避免自动状态变更时重复触发邮件 if ( ! did_action( 'woocommerce_order_status_changed' ) ) { $mailer = WC()->mailer(); $email_instance = $mailer->get_emails()['WC_Email_Customer_On_Hold_Order']; if ( $email_instance ) { $email_instance->trigger( $order_id ); } } }
调试小技巧
- 先测试自动状态变更:用COD支付方式下单,订单会自动变成On-Hold,检查管理员邮箱是否收到BCC
- 检查子主题
functions.php的语法错误:如果网站白屏,说明有语法问题,比如少了分号或者括号 - 查看服务器错误日志:如果邮件还是没收到,去主机面板找错误日志,排查邮件发送的底层问题
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

