如何将产品自定义字段收件人添加至WooCommerce新订单邮件通知
没问题,我来帮你搞定这个需求,分两步走就行:先给产品添加ACF邮箱字段,再修改WooCommerce新订单邮件的收件人列表。
第一步:用Advanced Custom Fields添加产品邮箱字段
首先得给每个产品绑定专属邮箱,操作步骤如下:
- 打开ACF插件后台,点击「添加字段组」
- 创建一个新字段,配置信息:
- 字段类型:选择「Email」(确保输入格式是合法邮箱)
- 字段名称:比如「产品对应通知邮箱」(自定义名称即可)
- 字段键:记住这个值(比如
field_xxxxxx,或者直接用字段名product_notify_email,代码里会用到)
- 设置位置规则:选择「文章类型」等于「产品」,这样所有产品编辑页都会显示这个字段
- 保存字段组,之后去产品编辑页面就能看到这个邮箱输入框了,记得给需要的产品填写对应的邮箱地址
第二步:修改WooCommerce新订单邮件的收件人
接下来要让系统自动把订单项对应的邮箱加入新订单邮件的收件人列表,我们用WooCommerce的钩子来实现。把下面的代码添加到你的主题functions.php文件(建议用子主题,避免主题更新丢失代码)或者自定义插件中:
add_filter( 'woocommerce_email_recipient_new_order', 'append_product_acf_email_to_order_recipients', 10, 2 ); function append_product_acf_email_to_order_recipients( $recipient, $order ) { // 订单无效时直接返回原收件人,避免报错 if ( ! $order || ! is_a( $order, 'WC_Order' ) ) { return $recipient; } $additional_recipients = []; // 遍历订单里的每个商品项 foreach ( $order->get_items() as $item ) { // 获取产品ID(变体产品要取变体ID) $product_id = $item->get_variation_id() ?: $item->get_product_id(); // 获取ACF字段的邮箱,替换成你自己的字段名/字段键 $product_email = get_field( 'product_notify_email', $product_id ); // 验证邮箱有效且未重复添加 if ( ! empty( $product_email ) && is_email( $product_email ) && ! in_array( $product_email, $additional_recipients ) ) { $additional_recipients[] = $product_email; } } // 合并原收件人和新收件人,去重后转成逗号分隔的字符串 if ( ! empty( $additional_recipients ) ) { $original_recipients = array_filter( explode( ',', $recipient ) ); $all_recipients = array_merge( $original_recipients, $additional_recipients ); $recipient = implode( ',', array_unique( $all_recipients ) ); } return $recipient; }
代码关键点说明
- 兼容变体产品:自动识别并获取变体产品的ACF字段值
- 邮箱验证:确保添加的是合法邮箱地址,避免无效收件人导致邮件发送失败
- 去重处理:同一邮箱不会被重复添加,即使订单里有多个相同产品
- 保留原收件人:不会覆盖默认的新订单邮件收件人,只是追加新的邮箱
测试与注意事项
- 测试前给目标产品填写好ACF邮箱字段,然后下单测试新订单邮件是否同时发送给原收件人和产品对应的邮箱
- 如果你的ACF字段键不是
product_notify_email,一定要替换成你自己设置的字段键(在ACF字段编辑页面可以查看) - 修改代码前建议备份主题文件,避免操作失误导致网站出错
内容的提问来源于stack exchange,提问作者Kapil Goyal
相关产品推荐
相关产品推荐

