Woocommerce: добавление второго адреса электронной почты не работает, если получатель не является администратором

Я пробовал несколько способов добавить дополнительных получателей в электронные письма Woocommerce, но похоже, что он работает только с тестовыми заказами, где основным получателем является администратор.

Это фрагменты, которые я пробовал. Если заказчиком заказа является администратор, на электронную почту отправляются оба адреса. Если заказ содержит адрес электронной почты клиента, он отправляется только на этот адрес электронной почты, а не в CC.

Вот фрагменты кода, которые я пробовал:

add_filter( 'woocommerce_email_recipient_customer_processing_order', 'my_email_recipient_filter_function', 10, 2);

function my_email_recipient_filter_function( $recipient ) {
$recipient = $recipient   . ', [email protected]';
return $recipient;
}

.

add_filter( 'woocommerce_email_headers', 'woocommerce_email_cc_copy', 10, 2);

function woocommerce_email_cc_copy( $headers, $email ) {
if ( $email == 'customer_processing_order') {
$headers .= 'CC: Your name <[email protected]>' . "\r\n"; //just repeat this line again to insert another email address in BCC
}

return $headers;
}

.

Это работает, но срабатывает с каждым уведомлением по электронной почте:

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function( $headers, $object ) {
$headers .= 'CC: My name <[email protected]>' . "\r\n";

return $headers;
}

Если я добавлю письмо $object в, так что он запускается только для обработки заказов клиентов, он только копирует на электронные письма администратора (только cc, не получатель), а не клиенты (ни cc, ни получатель).

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function( $headers, $object ) {
if ( $object == 'customer_processing_order') {
$headers .= 'CC: My name <[email protected]>' . "\r\n";
}

return $headers;
}

Буду признателен за любые советы.

0

Решение

Следующий код работает в последней версии Woocommerce (V3.4.3) добавление настраиваемого электронного письма в «CC» для обработки клиентом уведомления по электронной почте:

add_filter( 'woocommerce_email_headers', 'custom_cc_email_headers', 20, 3 );
function custom_cc_email_headers( $header, $email_id, $order ) {

// Only for "Customer Completed Order" email notification
if( 'customer_processing_order' !== $email_id )
return $header;

// Prepare the the data
$formatted_email = utf8_decode('Mister bean <[email protected]>');

// Add Cc to headers
$header .= 'Cc: '.$formatted_email .'\r\n';

return $header;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Вы даже можете добавить его в Bcc вместо Cc, как в этой ветке ответов:
Добавление пользовательских писем в BCC для определенных почтовых уведомлений Woocommerce


Крюк woocommerce_email_recipient_customer_processing_order похоже, не работает в Woocommerce 3.4.x.

1

Другие решения

Виновником была подписка Woocommerce, перекрывающая $email_id за customer_processing_order с customer_processing_renewal_order, После обновления этого текста заголовки и получатели были изменены.

Хук заголовков для подписок Woocommerce:

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function( $headers, $object ) {

// If Woocommerce Subscriptions is active, this needs the renewal email id
if ( $object == 'customer_processing_renewal_order') {
$headers .= 'CC: My name <[email protected]>' . "\r\n";
}

return $headers;
}

И получатель хук:

// If Woocommerce Subscriptions is active, hook needs the renewal email id
add_filter( 'woocommerce_email_recipient_customer_processing_renewal_order', 'my_email_recipient_filter_function', 10, 2);

function my_email_recipient_filter_function( $recipient ) {
$recipient = $recipient   . ', [email protected]';
return $recipient;
}
0

По вопросам рекламы [email protected]