Добавление пользовательских писем в BCC для определенных почтовых уведомлений Woocommerce

В Woocommerce у меня есть собственный шаблон электронной почты (id = 'wc_course_order'), который отправляется при покупке определенного продукта (онлайн-курс).

Ниже я использую подключенную функцию, которая добавляет получателей на основе метаданных заказа из пользовательских полей (например, "Электронная почта студента"). Это основано на ответе этой темы.

Как я могу добавить этих получателей как 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:"?

Полная функция, которую я использую:

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 ответ

Решение

Поскольку 'wc_course_order' - это пользовательский идентификатор уведомления по электронной почте, я не могу его протестировать с ним (поэтому для целей тестирования я прокомментировал это, когда сам тестировал функцию)…

Используя тот же способ, что и вы, чтобы получить электронное письмо, я предполагаю, что я получаю имя и фамилию из кода ниже (но я не совсем уверен)

Теперь, чтобы добавить эти электронные письма как BCC, вам нужно изменить хук:

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%, но он должен работать, я надеюсь).


Связанный: Как получить идентификатор заказа в хуке woocommerce_email_headers

Другие вопросы по тегам