返回

基于购买产品替换 WooCommerce 新订单电子邮件地址,提升业务流程效率

php

基于购买产品替换 WooCommerce 新订单电子邮件地址

问题:

你在使用 WooCommerce 时是否遇到过这样的情况:需要向基于所购产品向不同的电子邮件地址发送额外的电子邮件?同时,你又希望避免向 WooCommerce 中给定的默认地址发送新订单电子邮件。解决这个问题的方法是什么?

解决方案:

为了解决此问题,你可以使用一个自定义函数来过滤 woocommerce_email_recipient_new_order 钩子。这个钩子允许你修改发送新订单通知的电子邮件收件人。你可以使用如下代码来实现这个自定义函数:

add_filter( 'woocommerce_email_recipient_new_order', 'custom_email_recipient_new_order', 10, 2 );
function custom_email_recipient_new_order( $recipient, $order ) {
    // 检查订单是否合法,避免在后台使用 $order 时出错
    if( ! is_a($order, 'WC_Order') ) return $recipient;

    // 定义电子邮件收件人/产品 ID 对
    $recipients_product_ids = array(
        '[email protected]'   => array(23),
        '[email protected]'   => array(24),
        '[email protected]' => array(53, 57),
    );

    // 循环遍历订单项
    foreach ( $order->get_items() as $item ) {
        // 循环遍历已定义的产品 ID 对
        foreach ( $recipients_product_ids as $email => $product_ids ) {
            $product_id   = $item->get_product_id();
            $variation_id = $item->get_variation_id();
            // 检查产品 ID/变体 ID 是否与任何已定义的收件人匹配
            if( array_intersect([$product_id, $variation_id], $product_ids) && strpos($recipient, $email) === false ) {
                // 如果匹配,将电子邮件地址添加到收件人列表中
                $recipient .= ',' . $email;
            }
        }
    }
    return $recipient;
}

如何使用这个自定义函数:

  1. 将这段代码添加到你的 functions.php 文件中,或者创建一个自定义插件。
  2. 自定义 $recipients_product_ids 数组以匹配你的特定需求。

注意:

  • 这个自定义函数只会影响新订单电子邮件。它不会影响其他 WooCommerce 电子邮件通知。
  • 如果多个产品符合特定电子邮件收件人,则会发送一封电子邮件到该收件人。

结论:

使用这个自定义函数,你可以轻松地根据购买的产品向不同的电子邮件地址发送新订单电子邮件,同时防止向 WooCommerce 中给定的默认地址发送电子邮件。这使你能够向不同部门或人员发送相关订单信息,从而提高你的业务流程效率。

常见问题解答:

1. 这个自定义函数是否与所有 WooCommerce 版本兼容?

答:该自定义函数应该与 WooCommerce 的所有版本兼容,但建议使用最新版本以获得最佳兼容性。

2. 我可以在 WooCommerce 的所有电子邮件通知中使用这个自定义函数吗?

答:否,这个自定义函数只适用于新订单电子邮件。要修改其他电子邮件通知,你需要使用不同的钩子。

3. 如果多个产品符合特定电子邮件收件人,会发生什么情况?

答:在这种情况下,会向该收件人发送一封电子邮件。

4. 我可以在哪里找到更多有关 WooCommerce 电子邮件定制的信息?

答:请参阅 WooCommerce 官方文档中的 电子邮件模板 部分。

5. 我应该如何解决这个自定义函数的任何问题?

答:如果你遇到任何问题,请尝试在代码中添加 debug_to_console( $recipient );,以查看修改后的收件人地址。你还可以查看 WooCommerce 的 支持论坛 以获得帮助。