我正在尝试根据客户的送货地址动态地将某些电子邮件添加到新订单收件人列表中。
我们正在使用PayPal advanced来通过n iframe处理我们网站内的付款。
问题是切换电子邮件的过滤器使用客户的收货地址,我从两个地方之一获取:
$woocommerce->customer->shipping_country
$woocommerce->session->customer['shipping_country'];
在本地我没有使用paypal高级激活,因此在测试时它会起作用。但是在生产服务器上我们正在使用它,而这就是问题发生的地方。当过滤器尝试获取客户的装运订单时,这些全局对象为空。这让我相信,一旦完成PayPal订单,当前页面将被重定向到感谢页面,其中包含适当的信息,但是当运行过滤器时全局变量为空。
话虽如此,如何在woocommerce_email_recipient_new_order
运行时获取客户的送货地址信息?
答案 0 :(得分:5)
下订单后,您需要从$order
对象而不是会话中检索信息(例如送货国家/地区)。订单将作为第二个参数传递给woocommerce_email_recipient_new_order
过滤器here。
以下是如何将订单对象传递给过滤器的回调并使用它来修改收件人的示例:
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和以前的版本。