信息发布→ 登录 注册 退出

WooCommerce 根据产品属性动态添加订单邮件收件人教程

发布时间:2025-11-08

点击量:

本教程详细介绍了如何在 WooCommerce 中,通过 PHP 代码根据订单中产品的特定属性(包括简单产品和可变产品)动态添加自定义邮件收件人。我们将利用 woocommerce_email_recipient_new_order 过滤器,通过遍历订单商品并检查其属性(包括父产品属性),实现灵活的邮件通知配置,确保特定商品属性的订单能发送给指定的收件人。

1. 需求背景与挑战

在 WooCommerce 运营中,有时需要根据订单中包含的商品特性,将订单通知邮件发送给特定的收件人。例如,如果订单中包含“定制服务”产品,需要额外通知定制部门;如果包含“特殊商品A”,则需要通知供应商A。对于简单产品,直接检查其属性相对简单;但对于可变产品(Variable Product),其变体(Variation)可能继承或覆盖父产品的属性,这使得属性检查变得复杂。本教程旨在提供一个健壮的解决方案,能够同时处理简单产品和可变产品,确保无论属性定义在哪个层面,都能正确识别并添加收件人。

2. WooCommerce 邮件过滤器介绍

WooCommerce 提供了丰富的过滤器(Filters)和动作(Actions),允许开发者在不修改核心代码的情况下扩展其功能。针对订单邮件收件人的修改,我们主要使用 woocommerce_email_recipient_new_order 过滤器。

  • woocommerce_email_recipient_new_order: 这个过滤器允许我们在新订单邮件发送之前,修改其收件人列表。它接收两个参数:当前的收件人字符串 $recipient 和 WC_Order 对象 $order。

3. 实现原理与步骤

要实现根据产品属性动态添加收件人,我们需要以下核心步骤:

  1. 定义目标属性和收件人: 明确哪些属性术语(term slug)对应哪些额外的邮箱地址。
  2. 挂载过滤器: 使用 add_filter() 将我们的自定义函数挂载到 woocommerce_email_recipient_new_order 过滤器上。
  3. 遍历订单商品: 获取订单中的所有商品项(order items)。
  4. 获取商品对象: 对于每个商品项,获取其对应的 WC_Product 对象(可能是简单产品或变体)。
  5. 检查产品属性:
    • 首先检查当前商品对象(无论是简单产品还是变体)是否包含目标属性术语。
    • 如果当前商品是变体,还需要额外检查其父产品是否包含目标属性术语,因为某些属性可能只在父产品层面定义。
  6. 添加收件人: 如果找到匹配的属性,将对应的额外邮箱地址添加到收件人列表中。
  7. 去重与返回: 确保最终的收件人列表中没有重复的邮箱地址,并返回更新后的收件人字符串。

4. 示例代码

以下是实现上述功能的 PHP 代码,您可以将其添加到主题的 functions.php 文件或自定义插件中:

get_items() as $item_id => $item ) {
        $product = $item->get_product(); // 获取 WC_Product 或 WC_Product_Variation 对象

        // 如果无法获取产品对象,则跳过此商品项
        if ( ! $product ) {
            continue;
        }

        // 1. 检查当前产品(无论是简单产品还是变体)是否包含指定属性术语
        // has_term() 方法可以检查产品是否分配了特定分类法下的某个术语
        if ( $product->has_term( $term_slug1, $attribute_taxonomy ) ) {
            $additional_recipients[] = $additional_email1;
        }
        if ( $product->has_term( $term_slug2, $attribute_taxonomy ) ) {
            $additional_recipients[] = $additional_email2;
        }

        // 2. 如果当前产品是变体,还需要检查其父产品是否包含指定属性术语
        // 这很重要,因为有些属性可能只在父产品层面定义,而非变体本身
        if ( $product->is_type( 'variation' ) ) {
            $parent_product = wc_get_product( $product->get_parent_id() );
            if ( $parent_product ) {
                if ( $parent
标签:# php  # ai  # 邮箱  # 字符串  # 继承  # 对象  # 自定义  # 邮箱地址  # 遍历  # 其父  # 还需要  # 只在  # 是一个  # 发送给  # 都能  # 列表中  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!