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

修复woocommerce_email_headers过滤器按订单变量抄送用户及账单邮箱失效问题

问题排查与修复方案

现有代码错误点

  • 未定义$user变量:代码仅获取了用户ID,没有初始化用户对象就直接调用get_first_name()、get_last_name()方法,会直接触发致命错误
  • 重复获取订单对象:woocommerce_email_headers过滤器传入的第三个参数$order本身就是已实例化的WC_Order对象,不需要再调用wc_get_order()二次获取
  • 转义字符解析错误:\r\n换行符放在单引号内不会被PHP解析为换行,只会被当作普通字符串输出,导致邮件头格式错误
  • 缺少边界判断:未处理游客下单(无关联用户ID)、get_userdata()返回false的异常场景,会引发报错

修复后可用代码

add_filter( 'woocommerce_email_headers', 'cc_user_function', 10, 3);
function cc_user_function($headers, $email_id, $order) {
    // 只针对自定义邮件模板 + 验证订单对象有效性
    if ($email_id == 'my_custom_email' && is_a($order, 'WC_Order')) {
        $user_id = $order->get_user_id();
        // 排除游客下单场景,如有需要可调整为获取订单账单邮箱
        if ($user_id) {
            $user = get_userdata($user_id);
            if ($user) {
                $cc_email = $user->user_email;
                $user_name = $user->first_name . ' ' . $user->last_name;
                $formatted_email = utf8_decode($user_name . ' <' . $cc_email . '>');
                // 换行符用双引号包裹才能正确解析
                $headers .= "Cc: ".$formatted_email ."\r\n";
            }
        }
    }
    return $headers;
}

补充说明

如果你的自定义邮件模板需要同时支持游客下单场景抄送,可将用户ID判断替换为调用$order->get_billing_email()获取订单提交的账单邮箱即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:51:03