将自定义电子邮件添加到 BCC 以获取特定的 Woocommerce 电子邮件通知

Adding custom emails to BCC for specific Woocommerce email notifications

在 Woocommerce 中,我有一个自定义电子邮件模板 (id = 'wc_course_order'),它会在购买特定产品(在线课程)时发送。

下面我使用了一个钩子函数,它根据来自自定义字段(即 "Student Email")的订单元数据添加收件人。它基于 .

我如何将这些收件人添加为密件抄送并获取他们的 "First Name" 字段并将其添加到电子邮件正文中,尤其是考虑到两个不同的学生可能会同时购买两份课程产品 names/emails?

行输出为:

"meta_data": [{"id": 652,
   "key": "First Name - 1",
    "value": "John"},
    {"id": 653,
    "key": "Last Name - 1",
    "value": "Doe"},
    {"id": 654,
    "key": "Student Email - 1",
    "value": "johndoe@example.com"}]

然后对于在同一购买中注册的其他学生,输出将是 "key":"First Name - 2"、"value":"Jane" 和“... - 3" 等等

我意识到它可以分为两个问题:

  1. 除了电子邮件(我已经抓取过,请参阅下面的完整功能)之外,我如何抓取他们的名字
  2. 如何将他们的电子邮件地址添加为 BCC,而不是像常规那样附加 $recipients "TO:"?

我正在使用的全部功能:

add_filter( 'woocommerce_email_recipient_wc_course_order', 'student_email_notification', 10, 2 );
function student_email_notification( $recipient, $order) {
    $student_emails = array();
    $enroll_num = 0;

    // Loop though  Order IDs
    foreach( $order->get_items() as $item_id => $item_data ){
        $course_qty = $item_data->get_quantity();
        $q = 1;
        while ( $q <= $course_qty){
            // Get the student email
            $enroll_num++;
            $student_email = wc_get_order_item_meta( $item_id, 'Student Email - '.$enroll_num, true );
            if( ! empty($student_email) )
                $student_emails[] = $student_email; // Add email to the array
            $q++;
        }
    }

    // If any student email exist we add it
    if( count($student_emails) > 0 ){
        // Remove duplicates (if there is any)
        $student_emails = array_unique($student_emails);
        // Add the emails to existing recipients
    $recipient .= ',' . implode( ',', $student_emails );
    }
    return $recipient;
}

这一切都可以在 functions.php 内完成,还是应该在我拥有的单独电子邮件模板文件中完成?

因为'wc_course_order'是一个自定义的电子邮件通知ID,我不能用它来真正测试它(所以为了测试目的,我在自己测试功能时对它进行了评论)…

使用与您相同的方式获取电子邮件,我想我在下面的代码中获取了 名字和姓氏 (但我是不确定)

现在要将此电子邮件添加为密件抄送,您必须更改挂钩:

add_filter( 'woocommerce_email_headers', 'student_email_notification', 20, 3 );
function student_email_notification( $header, $email_id, $order ) {
    // Only for 'wc_course_order' notification
    if( 'wc_course_order' != $email_id ) return $header; 

    $student_emails = array();
    $enroll_num = 0;

    // Loop though  Order IDs
    foreach( $order->get_items() as $item_id => $item_data ){
        $course_qty = $item_data->get_quantity();
        $q = 1;
        while ( $q <= $course_qty){
            $enroll_num++;
            // Get the student full Name
            $full_name     = wc_get_order_item_meta( $item_id, 'First Name - '.$enroll_num, true );
            $full_name    .= ' ' . wc_get_order_item_meta( $item_id, 'Last Name - '.$enroll_num, true );
            // Get the student email
            $student_email = wc_get_order_item_meta( $item_id, 'Student Email - '.$enroll_num, true );
            if( ! empty($student_email) && $full_name != ' ' )
                // Format the name and the email and set it in an array
                $student_emails[] = utf8_decode($full_name . ' <' . $student_email . '>'); // Add name + email to the array
            $q++;
        }
    }

    // If any student email exist we add it
    if( count($student_emails) > 0 ){
        // Remove duplicates (if there is any)
        $student_emails = array_unique($student_emails);
        // Add the emails to existing recipients
        $header .= 'Bcc: ' . implode(',', $student_emails) . "\r\n";
    }
    return $header;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。经过测试并有效
(我无法真正 100% 地测试您的代码,但我希望它应该有效).


相关: