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

В Woocommerce я пытаюсь настроить код из этой темы чтобы добавить пользовательское электронное письмо в качестве адреса электронной почты «CC» в уведомлении по электронной почте о завершении заказа:

/**
* Function adds a BCC header to emails that match our array
*
* @param string $headers The default headers being used
* @param string $object  The email type/object that is being processed
*/
function add_cc_to_certain_emails( $headers, $object ) {
// email types/objects to add cc to
$cc_email = get_user_meta( $user_id, 'order_cc_email', true ); // MY CUSTOM CODE
$add_cc_to = array(
'customer_completed_order', // Customer Processing order from WooCommerce
);
// if our email object is in our array
if ( in_array( $object, $add_cc_to ) ) {
// change our headers
$headers = array(
$headers,
//          'Cc: Me <me@example.com>' ."\r\n", // INITIAL CODE
'Cc: '.$cc_email.' <'.$cc_email.'>' ."\r\n", // MY CUSTOM CODE
}
return $headers;
}
add_filter( 'woocommerce_email_headers', 'add_cc_to_certain_emails', 10, 2 );

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

Как получить пользовательскую электронную почту пользователя из метаданных пользователя?

Как добавить это письмо (с полным именем клиента) как «CC» в заголовке письма?

0

Решение

В вашей подключенной функции отсутствуют некоторые аргументы, как woocommerce_email_headers Крюк фильтра допускает 3 аргумента:

  • $header ===> данные заголовка, которые будут возвращены в этом фильтре
  • $email_id==> текущий WC_Email Я БЫ (но не $object…)
  • $order ====> экземпляр WC_Order объект (недостающий полезный)

Попробуйте этот пересмотренный код вместо этого:

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

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

// Get the custom email from user meta data  (with the correct User ID)
$custom_user_email = get_user_meta( $order->get_user_id(), 'order_cc_email', true );

if( ! empty($custom_email) )
return $header; // Exit (if empty value)

// Get customer billing full name
$user_name  = $order->get_billing_first_name().' ';
$user_name .= $order->get_billing_last_name();

// Merge and prepare the data
$formatted_email = utf8_decode($user_name . ' <' . $custom_user_email . '>');

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

return $header;
}

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

Связанные темы:

0

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

Других решений пока нет …