Уведомления электронной почты 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; } |
Можно записывать несколько адресов, через запятую, если это необходимо. Вот и всё, ребята.
Добрый день, до сих пор работает?
Добрый день! Работает
бывает хук во время оформления заказа срабатывает несколько раз и не всегда там есть объект $order. Это и вызывает ошибку.
Помогло так:
if (is_object($order)) {
$user_city = $order->get_billing_city();
if(!empty($user_shipping_country))
$user_city = get_shipping_city();
}
что-то значает гоняет его по кругу, смотрите сами ваш проект. Чем больше проверок, тем лучше, конечно