为特定WooCommerce邮件通知添加自定义用户邮箱至抄送列表
在WooCommerce订单完成邮件中添加自定义抄送(CC)地址的正确实现
我来帮你修正这段代码,解决在WooCommerce订单完成邮件里添加自定义CC地址的问题——原代码里有几个关键问题,比如未定义的$user_id、不完整的函数参数调用,还有没精准匹配订单完成的邮件类型,调整后的完整可用代码如下:
/** * 在WooCommerce订单完成客户通知邮件中添加自定义CC地址 * @param string $headers 默认邮件头信息 * @param string $object 邮件类型标识 * @param WC_Email $email 邮件对象实例 * @return string 修改后的邮件头 */ function add_cc_to_completed_order_emails( $headers, $object, $email ) { // 仅针对「客户订单完成通知」邮件生效 if ( 'customer_completed_order' !== $object ) { return $headers; } // 获取当前邮件关联的订单对象 $order = $email->object; if ( ! $order instanceof WC_Order ) { return $headers; } // 获取订单绑定的用户ID $user_id = $order->get_user_id(); if ( empty( $user_id ) ) { return $headers; } // 从用户元数据中获取自定义CC邮箱 $cc_email = get_user_meta( $user_id, 'order_cc_email', true ); // 验证邮箱格式合法性 if ( ! empty( $cc_email ) && is_email( $cc_email ) ) { // 将CC头追加到现有邮件头中 $headers .= 'Cc: ' . esc_html( $cc_email ) . "\r\n"; } return $headers; } add_filter( 'woocommerce_email_headers', 'add_cc_to_completed_order_emails', 10, 3 );
关键修正与说明:
- 补全过滤器参数:
woocommerce_email_headers实际支持3个参数,新增$email参数才能获取到订单关联信息 - 精准锁定邮件类型:只对
customer_completed_order(客户端的订单完成通知)生效,避免干扰其他WooCommerce邮件 - 多层安全校验:
- 检查订单对象是否有效
- 确认用户ID存在
- 用
is_email()确保获取到的是合法邮箱格式
- 合规构建邮件头:用
\r\n分隔头信息,保证邮件格式符合标准
使用提示:
你可以把这段代码添加到主题的functions.php文件,或者自定义插件中。另外要确保用户的自定义字段order_cc_email已经正确存储了目标邮箱地址(比如通过用户后台编辑页、前端表单等方式设置)。
内容的提问来源于stack exchange,提问作者RockPeach
相关产品推荐
相关产品推荐

