WooCommerce 插件 PHP 挂钩上的空 $order 变量

Posted

技术标签:

【中文标题】WooCommerce 插件 PHP 挂钩上的空 $order 变量【英文标题】:Empty $order variable on WooCommerce plugin PHP hook 【发布时间】:2017-10-23 19:27:44 【问题描述】:

我在尝试挂​​钩 WordPress 的 WooCommerce 插件时遇到问题。 问题是我需要根据他们选择的本地取件运输选项有条件地更改订单的收件人电子邮件。我的代码可以正常工作几个月,但突然之间;它停止工作。 这就是我的 functions.php 文件中的内容:

    add_filter( 'woocommerce_email_recipient_new_order', 'diff_recipients_email_notifications', 10, 2 );
function diff_recipients_email_notifications( $recipient, $order ) 

    $shippingOptionOne = 'email@example.com';
    $shippingOptionTwo = 'email2@example.com';
    $shippingOptionThree = 'email3@example.com';

    $order_shipping = $order->get_items('shipping');
    $key = key($order_shipping);
    $shipping_method_id = $order_shipping[$key]['item_meta']['method_id'][0];

    if($shipping_method_id == 'local_pickup:6' )
    
        $recipient = $shippingOptionOne;
    
    elseif($shipping_method_id == 'local_pickup:4')
        $recipient = $shippingOptionTwo;
    
    elseif($shipping_method_id == 'local_pickup:7')
        $recipient = $shippingOptionThree;
    
    return $recipient;

我已经进行了一些测试和研究,经过一点调试,我得出的结论是,作为函数的第二个参数出现的变量 $order 正在打印一个空值,所以我可以' t 得到 $order_shipping = $order->get_items('shipping'); ($order 正在打印一个空白区域)。

提前致谢。

P.S:这是我最初用来编写代码的链接:WooCommerce email notifications: different email recipient for different cities

【问题讨论】:

【参考方案1】:

我和我的团队花了一些时间进行调试,最终找到了解决方案。 出于某种原因,var_dump 没有打印订单,但它就在那里,我们只是更改了这一行:

$order_shipping = $order->get_items('shipping');
    $key = key($order_shipping);
    $shipping_method_id = $order_shipping[$key]['item_meta']['method_id'][0];

并用这个替换它:

$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0];

当然我们也变了

$shipping_method_id

与:

$chosen_shipping

它就像一个魅力!

【讨论】:

以上是关于WooCommerce 插件 PHP 挂钩上的空 $order 变量的主要内容,如果未能解决你的问题,请参考以下文章

单个产品页面上的 Woocommerce 钩子溢出

WooCommerce 操作挂钩和覆盖模板

如何从functions.php中的简码挂钩中排除产品类别ID - WooCommerce

Woocommerce - 创建优惠券时挂钩

在 WooCommerce 中检查挂钩功能破坏网站上的用户角色

Woocommerce 订阅挂钩案例