Добавьте адрес электронной почты аккаунта при условии обработки Клиента. Уведомление по электронной почте в Woocommerce. - PullRequest
0 голосов
/ 08 ноября 2018

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

Наш клиент попросил нас внести следующие изменения в квитанции заказа по электронной почте, полученные при создании заказа: Квитанции должны быть отправлены владельцу счета и см. Платежное письмо, если оно отличается

Как мы знаем, Woocommerce по умолчанию отправляет квитанцию ​​заказа (Обработка клиентов), основываясь только на наборе billing_email при оформлении заказа, поэтому я начал искать способ добавить на адрес электронной почты владельца учетной записи это также.

Я немного покопался и нашел несколько ответов на Stackoverflow о том, как это сделать, и предлагаемое решение использовало встроенную функцию woocommerce_email_recipient_customer_processing_order . Этот подход только добавил бы к электронному письму в заголовке «to» - без идеала. Он также не учитывает возможные повторные отправки на один и тот же адрес электронной почты, что, по крайней мере, в случае нашего сервера здесь, привело к тому, что письмо не было доставлено. Нет Буэно.

Приведенная ниже функция представляет собой обходной путь, в котором мы вызываем функцию WP Core 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», продолжайте
  • Получить текущую электронную почту пользователя
  • Получите адрес электронной почты для выставления счета в заказе
  • назначить поле CC текущего пользователя электронной почты
  • сделано

Насколько я могу судить, не было более простого способа справиться с этим, поэтому я публикую это здесь в надежде увидеть, есть ли у кого-то еще более элегантное решение. Приведенный выше код работает путем размещения в дочерней теме functions.php .

1 Ответ

0 голосов
/ 08 ноября 2018

Вы не можете получить текущего или текущего идентификатора пользователя на хуках уведомлений по электронной почте.
Сначала вам нужно получить идентификатор клиента из заказа , затем вы можете получить объект WP_User для получения электронной почты учетной записи.

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

1) Добавьте адрес электронной почты учетной записи клиента в качестве дополнительного получателя:

add_filter( 'woocommerce_email_recipient_customer_processing_order', 'add_customer_processing_order_email_recipient', 10, 2 );
function add_customer_processing_order_email_recipient( $recipient, $order ) {
    // Not in backend (avoiding errors)
    if( is_admin() ) return $recipient;

    if( $order->get_customer_id() > 0 ){

        // Get the customer WP_User object
        $wp_user = new WP_User($order->get_customer_id());

        if ( $wp_user->user_email != $order->get_billing_email() ) {
            // Add account user email  to existing recipient
            $recipient .= ','.$wp_user->user_email;
        }
    }

    return $recipient;
}

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


2) Добавьте адрес электронной почты учетной записи клиента в качестве адреса электронной почты CC:

add_filter( 'woocommerce_email_headers', 'add_cc_email_to_headers', 10, 3);
function add_cc_email_to_headers($header, $email_id, $order) {
    // Only for "Customer Processing Emails"  email notifications
    if( 'customer_processing_order' == $email_id ) {

        if( $order->get_customer_id() > 0 ){
            // Get the customer WP_User object
            $wp_user = new WP_User($order->get_customer_id());

            if ( $wp_user->user_email != $order->get_billing_email() ) {
                $header .= 'Cc: ' . utf8_decode($order->get_formatted_billing_full_name() . ' <' . $wp_user->user_email . '>') . "\r\n";
            }
        }
    }
    return $header;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...