在WooCommerce插件PHP钩子上清空$ order变量

时间:2017-05-23 17:43:29

标签: php wordpress woocommerce hook-woocommerce

我试图在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打印一个空格)。

提前致谢。

P.S:这是我用来制作代码的链接:WooCommerce email notifications: different email recipient for different cities

1 个答案:

答案 0 :(得分:0)

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

它充当魅力!