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

Empty $order variable on WooCommerce plugin PHP hook

我在尝试挂​​钩 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 正在打印一个空值,所以我无法获得 $order_shipping = $order->get_items('shipping'); ($order 正在打印一个空 space)。

提前致谢。

P.S:这是link我用来制作我的代码的第一位:WooCommerce email notifications: different email recipient for different cities

我和我的团队花了一些时间进行调试,然后我们找到了解决方案。 出于某种原因,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

而且它很有魅力!