
本教程详细讲解如何在 WooCommerce 中根据订单内商品的特定属性(如变体属性)动态添加自定义邮件收件人。通过利用 `woocommerce_email_recipient_new_order` 过滤器,我们能够检查订单中的每个商品及其属性,并据此将额外的邮箱地址添加到新订单通知的收件人列表中,从而实现更精细化的订单邮件分发策略。
在 WooCommerce 运营中,有时我们可能需要根据订单中包含的特定商品属性(例如,某个商品的颜色、尺寸或特定的定制选项)将新订单通知发送给不同的团队或个人。例如,如果订单中包含“定制服务A”的产品,则需要同时通知负责该服务的团队。WooCommerce 默认的邮件设置无法直接实现这种基于商品属性的动态分发。
为了解决这一问题,我们可以利用 WooCommerce 提供的 woocommerce_email_recipient_new_order 过滤器。这个过滤器允许我们在新订单邮件发送之前,修改其收件人列表。通过编写自定义函数,我们可以遍历订单中的商品,检查它们的属性,并根据匹配结果动态地添加额外的收件人邮箱。
以下是实现这一功能的完整代码示例。此代码将检查订单中的每个商品,无论是简单商品还是变体商品,只要其包含特定的全局属性术语(例如 pa_d 属性下的 d1 或 d2 术语),就会将相应的自定义邮箱添加到新订单通知的收件人列表中。
/**
* 根据订单中商品的特定属性动态添加自定义邮件收件人。
*
* @param string $recipient 原始收件人字符串。
* @param WC_Order $order WC_Order 对象。
* @return string 修改后的收件人字符串。
*/
add_filter( 'woocommerce_email_recipient_new_order', 'custom_email_recipient_by_product_attribute', 10, 2 );
function custom_email_recipient_by_product_attribute( $recipient, $order ) {
// 确保 $order 是一个 WC_Order 实例
if ( ! is_a( $order, 'WC_Order' ) ) {
return $recipient;
}
// 定义额外的收件人邮箱
// 请将这些邮箱替换为实际的收件人地址
$additional_email1 = "team_d1@example.com";
$additional_email2 = "team_d2@example.com";
// 定义要匹配的属性术语 slug
// 例如,如果您的全局属性是“颜色”,其分类法名称可能是“pa_color”
// 术语 slug 可能是“red”、“blue”等
$term_slug1 = "d1"; // 第一个要匹配的术语 slug
$term_slug2 = "d2"; // 第二个要匹配的术语 slug
$attribute_taxonomy = "pa_d"; // 全局属性的分类法名称(例如 'pa_color', 'pa_size')
$has_matching_term = false; // 标记是否已找到匹配的属性术语
// 遍历订单中的每个商品项
foreach ( $order->get_items() as $item ) {
// 获取商品对象。此方法对简单商品和变体商品都有效。
$product = $item->get_product();
// 如果无法获取商品对象,则跳过当前商品项
if ( ! $product ) {
continue;
}
// 使用 wc_product_has_term() 检查商品是否包含特定的属性术语。
// 这个函数能够可靠地检查简单商品或变体商品是否拥有指定分类法下的某个术语。
if ( wc_product_has_term( $product, $term_slug1, $attribute_taxonomy ) ) {
// 如果找到匹配项,将额外的邮箱地址添加到收件人列表
$recipient .= ',' . $additional_email1;
$has_matching_term = true;
}
if ( wc_product_has_term( $product, $term_slug2, $attribute_taxonomy ) ) {
// 如果找到匹配项,将额外的邮箱地址添加到收件人列表
$recipient .= ',' . $additional_email2;
$has_matching_term = true;
}
// 如果已经找到匹配项并添加了相应的收件人,则可以停止遍历,
// 避免不必要的检查和重复添加相同的邮箱。
if ( $has_matching_term ) {
break;
}
}
return $recipient; // 返回修改后的收件人字符串
}过滤器挂钩 (add_filter):
函数定义 (custom_email_recipient_by_product_attribute):
配置自定义邮箱和属性:
遍历订单商品:
检查商品属性:
动态追加收件人:
优化循环跳出:
通过利用 woocommerce_email_recipient_new_order 过滤器和 wc_product_has_term() 函数,我们能够灵活地根据 WooCommerce 订单中商品的特定属性动态调整新订单通知的收件人。这种方法不仅功能强大,而且易于理解和维护,为商店管理员提供了更精细化的订单管理和通知分发能力,有助于提高团队协作效率。
以上就是WooCommerce:根据商品属性动态添加订单邮件收件人的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号