В 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": "[email protected]"}]
И тогда для дополнительного студента, зарегистрированного в той же покупке, выводом будет «ключ»: «Имя — 2», «Значение»: «Джейн», «… — 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
или это должно быть сделано в отдельном файле шаблона электронной почты, который у меня есть?
Поскольку ‘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
Других решений пока нет …