Отправить заказ Woocommerce на адрес электронной почты, указанный на странице продукта

Я использую Woocommerce и плагин Product Addons для добавления дополнительных полей в продукт. Одним из этих полей является адрес электронной почты, позволяющий людям отправлять подтверждение заказа на другой адрес, а не адрес для выставления счетов, указанный на странице оформления заказа. Письма должны быть отправлены на оба адреса.

Есть мысли о том, как изменить файл functions.php для этого?

1

Решение

в woocommerce_email_recipient_{$this->id} фильтр-крюк, вы можете использовать $order аргумент, чтобы получить ваш второй адрес электронной почты.

Но сначала давайте добавим глобально поле электронной почты с плагином Product Add-ons…

  1. Поле надписи на товаре (заполните поле и добавьте в корзину):

введите описание изображения здесь

  1. Это поле «Электронная почта» на странице заказа (спасибо) после оформления заказа:

введите описание изображения здесь

Как вы можете заметить, метка этого поля «Email»…

Теперь, если я посмотрю в базе данных в wp_woocommerce_order_itemmeta для этого заказа я могу видеть для meta_key "Email" meta_value "loic@TheAztec.com" :

введите описание изображения здесь

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

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

add_filter( 'woocommerce_email_recipient_customer_completed_order', 'additional_customer_email_recipient', 10, 2 ); // Processing Order
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'additional_customer_email_recipient', 10, 2 ); // Completed Order
function additional_customer_email_recipient( $recipient, $order ) {
if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;

$additional_recipients = array(); // Initializing…

// Iterating though each order item
foreach( $order->get_items() as $item_id => $item_data ){
// HERE set the the correct meta_key (like 'Email') to get the correct value
$email = wc_get_order_item_meta( $item_id, 'Email', true );

// Avoiding duplicates (if many items with many emails)
// or an existing email in the recipient
if( ! in_array( $email, $additional_recipients ) && strpos( $recipient, $email ) === false )
$additional_recipients[] = $email;
}

// Convert the array in a coma separated string
$additional_recipients = implode( ',', $additional_recipients);

// If an additional recipient exist, we add it
if( count($additional_recipients) > 0)
$recipient .= ','.$additional_recipients;

return $recipient;
}

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

Проверено и работает.

1

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

Вы можете добавить код ниже в вашем function.php

add_filter( 'woocommerce_email_recipient_customer_completed_order', 'your_email_recipient_filter_function', 10, 2);

function your_email_recipient_filter_function($recipient, $object) {
$recipient = $recipient . ', me@myemail.com';
return $recipient;
}

и если вы хотите отправить письмо в BCC, пожалуйста, попробуйте следующий код:

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

function mycustom_headers_filter_function( $headers, $object ) {
if ($object == 'customer_completed_order') {
$headers .= 'BCC: My name <my@email.com>' . "\r\n";
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector