我试图隐藏除一个基于shipping类的shipping方法之外的所有方法,当选择了一个属于特定类的产品时,实际上是强制使用fedex过夜方法。
我从this code开始,修改如下:

add_filter( 'woocommerce_available_shipping_methods', 'hide_shipping_based_on_class' ,    10, 1 );

function check_cart_for_share() {

// load the contents of the cart into an array.
global $woocommerce;
$cart = $woocommerce->cart->cart_contents;

$found = false;

// loop through the array looking for the tag you set. Switch to true if the tag is     found.
foreach ($cart as $array_item) {
$term_list = wp_get_post_terms( $array_item['product_id'], 'product_shipping_class', array( "fields" => "names" ) );

if (in_array("Frozen",$term_list)) {

      $found = true;
      break;
    }
}

return $found;

}

function hide_shipping_based_on_class( $available_methods ) {

// use the function above to check the cart for the tag.
if ( check_cart_for_share() ) {

// remove the rate you want
unset( $available_methods['canada_post,purolator,fedex:FEDEX_GROUND,fedex:GOUND_HOME_DELIVERY'] );
}

// return the available methods without the one you unset.
return $available_methods;

}

不过,它似乎没有隐藏任何运输方法。不知道我错过了什么…
这是一个多站点的安装,我正在加拿大的http://stjeans.harbourcitydevelopment.com测试它。
我正在运行表运费模块,以及联邦快递,普罗拉托和加拿大邮政模块。

最佳答案

我也有同样的问题,修改你的代码有帮助。一个问题是“woomerce_available_shipping_methods”过滤器在woomerce 2.1中被弃用。所以你必须使用新的一个:“Woomerce_套餐价格”。类似的任务也有WooCommerce tutorial
所以,我更改了filter hook,当条件为true时,我迭代所有的运输方法/费率,找到要显示给客户的方法/费率,从中创建新的数组并返回这个数组(只有一个项)。
我认为您的问题(除了不推荐的钩子)主要是在错误的unset($available_methods[…])行中。它不能那样工作。
这是我的代码:

add_filter( 'woocommerce_package_rates', 'hide_shipping_based_on_class' ,    10, 2 );
function hide_shipping_based_on_class( $available_methods ) {
    if ( check_cart_for_share() ) {
        foreach($available_methods as $key=>$method) {
            if( strpos($key,'YOUR_METHOD_KEY') !== FALSE ) {
                $new_rates = array();
                $new_rates[$key] = $method;
                return $new_rates;
            }
        }
    }
    return $available_methods;
}

警告!我发现Woomerce的套餐价格挂钩并不是每次都会被触发,而是只有在您更改购物车中的商品或商品数量时才会触发。或者对我来说是这样。也许这些可用的费率是缓存为购物车的内容。

关于php - Woocommerce,隐藏基于运输类的运输方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23701467/

10-09 14:11