Уведомления электронной почты WooCommerce с разными адресатами для разных городов

Имеется задача отправлять уведомления электронной почты на разные адреса в зависимости от указанного клиентом города в заказе. Такая цель возникает, когда интернет-магазин обслуживает несколько городов-филиалов, и заказы нужно разделять, отправляя email только одному из них. Очевидно, нужно написать хук к фильтру woocommerce_email_recipient_new_order, который обрабатывает адреса рассылки. Вот собственно и код, который следует поместить в файл function.php темы.

add_filter( 'woocommerce_email_recipient_new_order', 'citybase_recipients_email_notifications', 10, 2 );
function citybase_recipients_email_notifications( $recipient, $order ) {
 
// Адреса email
$email_city1 = 'address1@mail.ru,admininfo@mail.ru';
$email_city2 = 'address2@bk.ru,admininfo@mail.ru';
$email_city3 = 'address3@gmail.com,admininfo@mail.ru';
$email_city4 = 'address4@gmail.com,admininfo@mail.ru';
 
 
// присваиваем переменным значения городов
$city1 = 'Чебоксары'; //
$city2 = 'Саратов'; //
$city3 = 'Казань'; //
$city4 = 'Ульяновск'; //
 
// User Country (опеределяем город заказчика)
$user_city = $order->get_billing_city();
// преобразуем все буквы в строчные и затем первую букву делаем прописной
$user_city = mb_convert_case($user_city, MB_CASE_LOWER , "UTF-8");
$user_city = mb_convert_case($user_city, MB_CASE_TITLE , "UTF-8");
 
// если поле города доставки не пустое, значит берем значние города оттуда
if(!empty($user_shipping_country))
$user_city = get_shipping_city();
 
// сравниваем и опеределяем какой адрес нужно задействовать
if ( $city1 == $user_city ) $recipient = $email_city1;
if ( $city2 == $user_city ) $recipient = $email_city2;
if ( $city3 == $user_city ) $recipient = $email_city3;
if ( $city4 == $user_city ) $recipient = $email_city4;
 
return $recipient;
}

Можно записывать несколько адресов, через запятую, если это необходимо. Вот и всё, ребята.

Вам понравиться

4 комментария

  1. Петр:

    Добрый день, до сих пор работает?

    • bogdanowsky:

      Добрый день! Работает

      • Serg:

        бывает хук во время оформления заказа срабатывает несколько раз и не всегда там есть объект $order. Это и вызывает ошибку.
        Помогло так:
        if (is_object($order)) {
        $user_city = $order->get_billing_city();
        if(!empty($user_shipping_country))
        $user_city = get_shipping_city();
        }

        • bogdanowsky:

          что-то значает гоняет его по кругу, смотрите сами ваш проект. Чем больше проверок, тем лучше, конечно

Добавить комментарий для Serg Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *