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

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

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

2 ответа

Решение

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

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

Вы можете добавить код ниже в вашем 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";
    }
Другие вопросы по тегам