WooCommerce Изменить получателя электронной почты в зависимости от страны доставки

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

мы используем PayPal для обработки платежей с нашего сайта с помощью n iframe.

Проблема в том, что фильтр, который переключает электронную почту, использует судно клиента – по адресу, которое я получаю из одного из двух мест:

$woocommerce->customer->shipping_country

$woocommerce->session->customer['shipping_country'];

Локально у меня нет активированного paypal, поэтому при тестировании он будет работать. Однако на производственном сервере мы его используем, и именно там возникает проблема. Эти глобальные объекты пусты, когда фильтр пытается захватить заказ на отправку клиента. Это заставляет меня думать, что после того, как заказ PayPal будет выполнен, текущая страница перенаправляется на страницу благодарности с соответствующей информацией, содержащейся в ней, однако глобальные переменные пусты при запуске фильтров.

С учетом сказанного, как я могу получить информацию о доставке клиента после woocommerce_email_recipient_new_order ?

После размещения заказа вам нужно получить информацию (например, страну отгрузки) из объекта $order а не из сеанса. Порядок передается в фильтр woocommerce_email_recipient_new_order здесь как второй аргумент.

Ниже приведен пример того, как передать объект заказа на обратный вызов фильтра и использовать его для изменения получателя:

 function so_39779506_filter_recipient( $recipient, $order ){ // get the shipping country. $order->get_shipping_country() will be introduced in WC2.7. $order->shipping_country is backcompatible $shipping_country = method_exists( $order, 'get_shipping_country') ) ? $order->get_shipping_country() : $order->shipping_country; if( $shipping_country == 'US' ){ // Use this to completely replace the recipient. $recipient = 'stack@example.com'; // Use this instead IF you wish to ADD this email to the default recipient. //$recipient .= ', stack@example.com'; } return $recipient; } add_filter( 'woocommerce_email_recipient_new_order', 'so_39779506_filter_recipient', 10, 2 ); 

Отредактировано, чтобы сделать код совместимым как с WooCommerce 2.7, так и с предыдущими версиями.