Так что это скорее мое решение, но я хотел открыть его, чтобы посмотреть, сможет ли сообщество найти лучшую альтернативу или потенциально найти применение этому решению.
Наш клиент попросил нас внести следующие изменения в квитанции о заказе по электронной почте, полученные при создании заказа: Квитанции должны отправляться владельцу учетной записи и копировать электронное письмо для выставления счетов, если оно отличается
Как мы знаем, Woocommerce по умолчанию отправляет квитанцию о заказе (обработка клиентов) на основе только установленного billing_email при оформлении заказа, поэтому я начал искать способ добавить к нему адрес электронной почты владельца учетной записи как хорошо.
Я немного покопался и нашел в Stackoverflow несколько ответов о том, как это сделать, и в предложенном решении использовалась встроенная функция woocommerce_email_recipient_customer_processing_order. Этот подход только добавит электронное письмо в заголовок «Кому», что не идеально. Он также не учитывает возможные повторные отправки на один и тот же адрес электронной почты, которые, по крайней мере, в случае с нашим сервером здесь, привели к тому, что электронное письмо не было доставлено. Нет буэно.
Приведенная ниже функция представляет собой обходной путь, в котором мы вызываем основную функцию WP wp_get_current_user() для получения электронного письма, с которым связан пользователь, а затем проверяем, совпадает ли оно с электронным письмом для выставления счетов.
add_filter( 'woocommerce_email_headers', 'add_email_recipient', 10, 3);
function add_email_recipient($header, $email_id, $order) {
// Only for "Customer Processing Emails" email notifications
if( ! ( 'customer_processing_order' == $email_id ) ) return;
$curr_user = wp_get_current_user();
$account_holder_email = $curr_user->user_email;
$billing_email = $order->get_billing_email();
$header ='';
if ( $account_holder_email != $billing_email ) {
$header .= 'Cc: '.$account_holder_email;
}
return $header;
}
Логика намерена протекать следующим образом:
- Настройте заголовки электронной почты woocommerce
- Если электронное письмо является «customer_processing_order», продолжайте
- Получить текущую электронную почту пользователя
- Получите адрес электронной почты для выставления счетов, указанный в заказе
- назначить поле копии электронной почты текущего пользователя
- сделано
Насколько я мог судить, не было более простого способа справиться с этим, поэтому я публикую это здесь в надежде увидеть, есть ли у кого-то более элегантное решение. Приведенный выше код работает при размещении в дочерней теме functions.php.