@Shaun ... Да, извините, я исправил свои маленькие ошибки, обновляя этот ответ ... спасибо

у иметь возможность изменить, кто получает уведомления по электронной почте от Woocommerce, в зависимости от роли пользователя при оформлении заказа.

Например, если пользователь вошел в систему как Оптовый клиент, то будет получено другое электронное письмо.

Я нашел, как изменить его, когда новый заказ завершен с помощьюwoocommerce_email_recipient_new_order ловушка, но я не могу найти никаких ловушек, связанных с ошибками или отмененными уведомлениями.

add_filter( 'woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2 );


function sv_conditional_email_recipient( $recipient, $order ) {

    // Bail on WC settings pages since the order object isn't yet set yet
    // Not sure why this is even a thing, but shikata ga nai
    $page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : '';
    if ( 'wc-settings' === $page ) {
        return $recipient; 
    }

    // just in case
    if ( ! $order instanceof WC_Order ) {
        return $recipient; 
    }


         if ( in_array( 'wholesale_customer', (array) $user->roles )  ) {
            $recipient .= ', [email protected]';
            return $recipient;
        }

    return $recipient;
}


add_filter( 'woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2 );

Может кто-нибудь помочь, пожалуйста?

Ответы на вопрос(1)

Решение Вопроса

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

Ниже у вас есть 3 крючка для «Новый заказ», «Отмененный заказ» и «Неудачный заказ», которые вы можете использовать для одной и той же подключенной функции.

В вашей функции я удалил некоторый ненужный код и заполнил код, чтобы получить данные клиента(пользовательские роли) связанные с заказом:

add_filter( 'woocommerce_email_recipient_new_order', 'user_role_conditional_email_recipient', 10, 2 );
add_filter( 'woocommerce_email_recipient_cancelled_order', 'user_role_conditional_email_recipient', 10, 2 );
add_filter( 'woocommerce_email_recipient_failed_order', 'user_role_conditional_email_recipient', 10, 2 );
function user_role_conditional_email_recipient( $recipient, $order ) {
    if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;

    // Get the customer ID
    $user_id = $order->get_user_id();

    // Get the user data
    $user_data = get_userdata( $user_id );

    // Adding an additional recipient for a custom user role
    if ( in_array( 'wholesale_customer', $user_data->roles )  )
        $recipient .= ', [email protected]';

    return $recipient;
}

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

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

 Shaun12 дек. 2017 г., 12:56
Привет, приятель, только что понял. $ user_id должен быть $ customer_id?
 Shaun12 дек. 2017 г., 10:49
Привет Лоик, это сработало! Большое спасибо. И спасибо за совет о нацеливании отдельных идентификаторов электронной почты :)
 LoicTheAztec12 дек. 2017 г., 13:18
@Shaun ... Да, извините, я исправил свои маленькие ошибки, обновляя этот ответ ... спасибо

Ваш ответ на вопрос