Прекратить отправку определенного электронного уведомления для определенных пользователей в Woocommerce - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу прекратить отправку электронных писем Woocommerce для конкретного пользователя / электронной почты.это мой пример кода, чтобы остановить отправку электронной почты после завершения заказа.

<?php
add_filter( 'woocommerce_email_headers', 'ieo_ignore_function', 10, 2);

function ieo_ignore_function($headers, $email_id, $order) {
    $list = 'admin@example.com,cs@example.com';
    $user_email = (method_exists( $order, 'get_billing_email' ))? $order->get_billing_email(): $order->billing_email;
    $email_class = wc()->mailer();
    if($email_id == 'customer_completed_order'){
        if(stripos($list, $user_email)!==false){
            remove_action( 'woocommerce_order_status_completed_notification', array( $email_class->emails['WC_Email_Customer_Completed_Order'], 'trigger' ) );
        }
    }
}

Но WP продолжает отправлять электронную почту.Я пытаюсь искать в документах и ​​источниках Woocommerce (github) и Stackoverflow, но все еще не могу решить эту проблему.

1 Ответ

0 голосов
/ 28 февраля 2019

В этом примере уведомление «Заказ клиента выполнен» отключен для определенных адресов электронной почты клиента:

// Disable "Customer completed order" for specifics emails
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'completed_email_recipient_customization', 10, 2 );
function completed_email_recipient_customization( $recipient, $order ) {
    // Disable "Customer completed order
    if( is_a('WC_Order', $order) && in_array($order->get_billing_email(), array('jack@mail.com','emma@mail.com') ) ){
        $recipient = '';
    }
    return $recipient;
}

Код находится в файле function.php вашей активной дочерней темы (активной темы).Протестировано и работает.

Примечание: Для ловушки фильтра необходимо всегда возвращать аргумент отфильтрованной основной функции


Это также можно сделать из идентификаторов пользователя , например:

// Disable "Customer completed order" for specifics User IDs
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'completed_email_recipient_customization', 10, 2 );
function completed_email_recipient_customization( $recipient, $order ) {
    // Disable "Customer completed order
    if( is_a('WC_Order', $order) && in_array($order->get_customer_id(), array(25,87) ) ){
        $recipient = '';
    }
    return $recipient;
}

Код находится в файле function.php вашей активной дочерней темы (активной темы).Протестировано и работает.


Аналогично: Остановить уведомление по электронной почте для конкретного клиента на основе методов оплаты в Woocommerce

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