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, а не получателем), а не клиентами (ни 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;
}

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


person aleks1217    schedule 27.06.2018    source источник


Ответы (2)


Следующий код работает в последней версии 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 для определенных электронных уведомлений Woocommerce


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

person LoicTheAztec    schedule 27.06.2018
comment
Этот пример тоже работает некорректно. При использовании адреса, не являющегося администратором, CC не гаснет, но в обоих случаях на первый адрес электронной почты не приходит электронное письмо. В моих журналах сказано, что письмо было отправлено, но оно не пришло. Можете ли вы протестировать свой код с адресами, не связанными с вашей учетной записью администратора, и сказать мне, что он действительно работает? Может, это мой почтовый сервер, но я не понимаю, как это сделать. Для записи я использую частный домен для адреса администратора, Gmail для адреса клиента и iCloud в cc. - person aleks1217; 28.06.2018
comment
На моем тестовом сервере он просто работает с разными электронными письмами (из разных доменов)… Я уже много раз отвечал на похожие проверенные и принимал ответы. Значит, в вашей конфигурации что-то не так. - person LoicTheAztec; 28.06.2018
comment
Это должно быть правдой, но я не могу понять почему. Если я удалю if( 'customer_processing_order' !== $email_id ) return $header; cc работает правильно, хотя если я изменю его на 'customer_completed_order', cc снова перестанет работать. Я попробую отключить все плагины / темы и посмотрю, изменится ли это. - person aleks1217; 28.06.2018
comment
Подписки Woocommerce являются виновником. Поскольку 'customer_processing_renewal_order' специально переопределяет 'customer_processing_order', я подумал, что это будет так же просто, как изменить $email_id, но не повезло. Я также пробовал работать с 'woocommerce_order_status_pending_to_processing_notification', чтобы запросить, чтобы дополнительное электронное письмо было отправлено дополнительному получателю с шаблоном 'emails/customer-processing-order.php'. Во всех случаях, если подписки активны, они не работают, если подписки деактивированы, они работают. - person aleks1217; 29.06.2018
comment
Похоже, 'customer_processing_renewal_order' был правильным, за исключением того, что на моем тестовом сайте отключили это уведомление по электронной почте! (Можно было бы сэкономить два часа недоумения.) Я отправлю свой ответ ниже. Спасибо @LoicTheAztec за отзывчивость! - person aleks1217; 30.06.2018
comment
Поскольку вы не сказали в своем вопросе, что это связано с подписками, мой ответ является правильным по отношению к вашему первоначальному вопросу. Никто не может этого догадаться. - person LoicTheAztec; 30.06.2018
comment
Я абсолютно согласен. Я не осознавал, что проблема связана с плагином подписок, пока не смог определить это, отключив все плагины и повторно активировав их. (Я упоминал об этом вчера в своих комментариях!) Я уверен, что вы смогли бы решить эту проблему сразу же, если бы знали, что это связано с подписками. - person aleks1217; 30.06.2018
comment
И было довольно странно, как это сработало для администратора, поэтому я не думал, что это проблема, связанная с плагином, потому что в этом случае, как ни странно, он работал. - person aleks1217; 30.06.2018

Причина заключалась в том, что подписки 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;
}
person aleks1217    schedule 30.06.2018