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

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

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


person MacGyver_97    schedule 01.11.2017    source источник
comment
Поскольку у вас может быть много товаров для заказа, это дополнительное поле электронной почты должно быть не настраиваемым полем продукта, а дополнительным полем оформления заказа. Подумай ...   -  person LoicTheAztec    schedule 02.11.2017
comment
В корзине может быть более одного продукта, но в качестве первого шага на странице продукта запрашивается электронное письмо. Предполагается, что подтверждение покупки всегда будет приходить на один и тот же адрес, но он может отличаться от адреса выставления счета, поэтому он должен отображаться на странице продукта.   -  person MacGyver_97    schedule 02.11.2017


Ответы (2)


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

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

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

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

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

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

Как вы могли заметить, это поле называется «Электронная почта»…

Теперь, если я загляну в базу данных в wp_woocommerce_order_itemmeta для этого порядка, я могу увидеть meta_key "Email" meta_value "[email protected]":

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

Теперь я могу установить правильный 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 вашей активной дочерней темы (или темы) или также в любом файле плагина.

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

person LoicTheAztec    schedule 02.11.2017
comment
Огромное спасибо! Я постараюсь реализовать это и поставлю галочку правильно, если это сработает на моей стороне. - person MacGyver_97; 02.11.2017
comment
Оно работает! Спасибо! Теперь просто нужно убедиться, что это то, чего хочет клиент lol :) - person MacGyver_97; 02.11.2017

Вы можете добавить код ниже в свой 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 . ', [email protected]';
    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 <[email protected]>' . "\r\n";
    }
person Parth Trivedi    schedule 02.11.2017
comment
Большое спасибо, но я не могу жестко закодировать адрес электронной почты. Он должен поступать из поля, которое появляется на самой странице продукта. Он также не может поступать со страницы оформления заказа (или платежного адреса). Я не думаю, что ваше решение так делает ... - person MacGyver_97; 02.11.2017