WooCommerce 根据送货国家/地区更改电子邮件收件人

Posted

技术标签:

【中文标题】WooCommerce 根据送货国家/地区更改电子邮件收件人【英文标题】:WooCommerce Change Email Recipient Depending on Shipping Country 【发布时间】:2017-02-08 07:44:48 【问题描述】:

我正在尝试根据客户收货地址将某些电子邮件动态添加到新订单收件人列表中。

我们正在使用 PayPal Advanced 通过 n iframe 在我们的网站内处理付款。

问题在于切换电子邮件的过滤器使用了我从以下两个地方之一获得的客户收货地址:

$woocommerce->customer->shipping_country

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

在本地我没有激活 paypal 高级功能,所以在那里测试时它会起作用。但是在我们使用它的生产服务器上,这就是问题发生的地方。当过滤器试图抓取客户的发货订单时,这些全局对象是空的。这让我相信,一旦 PayPal 订单完成,当前页面将重定向到感谢页面,其中包含正确的信息,但是在运行过滤器时全局变量为空。

话虽如此,当woocommerce_email_recipient_new_order 运行时,我如何获取客户的送货地址信息?

【问题讨论】:

你能显示你的过滤代码吗? 【参考方案1】:

下订单后,您需要从$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 和以前的版本兼容。

【讨论】:

您的答案是引导我找到解决方案的答案,尽管这是有效的:$order->shipping_country,而不是功能。我在 API 文档中没有看到类似的功能。此外,我不知道您可以将 WC 对象传递给这样的操作函数。很酷! 抱歉,我认为这将在 WC 2.7 中推出。您可以在source 中看到它。直接获取对象属性将被弃用,因此在升级时请记住这一点。 @LoicTheAztec 虽然现在我想知道我是否应该拥有$recipient -= ', stack@example.com;相反,至少在我正在处理过滤器的 2.7 代码中,似乎期望使用逗号分隔的电子邮件地址字符串?你也这么理解吗? @LoicTheAztec 谢谢!我已通过 cmets 将其添加到答案中以完成。是的,WC2.7 将向后兼容,但如果您启用了调试模式,则会出现大量 php 警告。我正在努力更新我的插件以使其兼容,这真是一团糟。 @helgatheviking 是的,你是对的,这是 WC 代码中的特朗普革命 :) ...如果您需要帮助,我想我可以在星期一有空... 这对社区来说将是一场真正的噩梦。 他们应该引入新方法,保留旧代码行为,而不会在 WC 2.7 中弃用它们……他们应该逐步做到这一点。因此,对于所有 WooThemes 插件,他们在此更新之前也有一项巨大的工作(我只是笑着想着它)。可能这是自动获取的第一个真正的结果……

以上是关于WooCommerce 根据送货国家/地区更改电子邮件收件人的主要内容,如果未能解决你的问题,请参考以下文章

php [WooCommerce Core]根据送货国家/地区添加附加费

php [WooCommerce Core]根据送货国家/地区添加附加费

不允许客户在 WooCommerce 结帐中更改国家/地区

php WooCommerce订单电子邮件结算国家/地区

php WooCommerce订单电子邮件结算国家/地区

WooCommerce - 我们如何在订单电子邮件中将送货地址更改为 N/A?