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

时间:2018-04-10 01:42:15

标签: php woocommerce custom-fields email-notifications bcc

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

下面我使用一个钩子函数,根据自定义字段(即“学生电子邮件”)的订单元数据添加收件人。它基于this thread answer

如何将这些收件人添加为BCC并抓住他们的“名字”字段并将其添加到电子邮件正文中,特别是考虑到可以与两个不同的学生姓名/电子邮件一起购买两个数量的课程产品?

行输出为:

"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"}]

然后对于在同一次购买中注册的额外学生,输出将是“关键”:“名字 - 2”,“价值”:“简”和“...... - 3”等。

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

  1. 除了电子邮件之外我如何抓住他们的名字(我已经抓过了,请参阅下面的完整功能)?
  2. 如何将其电子邮件地址添加为BCC ,而不是将$收件人作为常规“TO:”附加?
  3. 我正在使用的全部功能:

    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内完成,还是应该在我单独的电子邮件模板文件中完成?

1 个答案:

答案 0 :(得分:1)

as&#39; wc_course_order&#39;是一个自定义的电子邮件通知ID,我无法用它进行真正的测试(所以出于测试目的,我自己测试了这个功能时评论了它)...

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

现在要将此电子邮件添加为BCC,您必须更改hook:

flow-copy-source -v src dist

代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作(我无法在100%时对您的代码进行真正的测试,但我希望它能够正常运行)

相关:How to get order ID in woocommerce_email_headers hook