You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现向管理员与客户同时发送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 );
        }
    }
}

调试小技巧

  1. 先测试自动状态变更:用COD支付方式下单,订单会自动变成On-Hold,检查管理员邮箱是否收到BCC
  2. 检查子主题functions.php的语法错误:如果网站白屏,说明有语法问题,比如少了分号或者括号
  3. 查看服务器错误日志:如果邮件还是没收到,去主机面板找错误日志,排查邮件发送的底层问题

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:17:43