Woocommerce根据发货地址检查设置和取消设置运输

时间:2015-10-27 21:51:36

标签: php wordpress woocommerce

以下版本的更新后的问题

我有一个woocommerce网站,我有几个不同的运输选项。我需要隐藏并显示这些运输选项,具体取决于“运送到不同地址按钮被检查”

//remove local pickup
function ddc_hide_shipping( $rates, $package ) {

    unset( $rates['local_pickup'] );

    return $rates;
}

//check if needs shipping address so we can unset local pickup
function ddc_update_shipping_options($instance) {

    parse_str(html_entity_decode($instance), $postData);
    if ( @$postData['ship_to_different_address']  ) {
        add_filter('woocommerce_package_rates', 'ddc_hide_shipping');
    } 
}
add_action('woocommerce_checkout_update_order_review', 'ddc_update_shipping_options');

使用从Scriptonomy得到的上述代码,我越来越近了。我遇到的问题,当用户检查并取消检查到不同的帐单地址时,这似乎不起作用。这仅适用于首页加载,而不适用于每次更新订单查看区域的ajax调用。

谢谢。

1 个答案:

答案 0 :(得分:0)

WC() - > cart-> needs_shipping_address()基于商店设置和商品设置...所以在这种情况下不理想,在大多数情况下每次都会触发。

使用$ instance数据代替,这是一个url编码的字符串。

  1. 解码并解析字符串,然后测试ship_to_different_address选项
  2. 在未选择选项时禁止无效数组索引错误
  3. 这是您的解决方案:

    parse_str(html_entity_decode($instance), $postData);
    if ( @$postData['ship_to_different_address']  ) {
            add_filter( 'woocommerce_package_rates', 'ddc_hide_shipping', 10, 2 );
    }
    

    把它放在你的动作钩子里。