隐藏WooCommerce中特定运输类别的所有统一费率运输方法

时间:2019-04-14 20:19:54

标签: php wordpress woocommerce cart shipping-method

我正在建立一个带有运输的网站,但是我收集了所有运输区域的物品,并且可以在所有运输区域中发送物品。

所以我已经为所有区域设置了运输类别。

我正在使用Hide shipping method for specific shipping classes in woocommerce答案代码,这是我所需要的。

但是我可以输入所有统一费率送货方式,而不是输入每个统一费用ID ,因此,当我添加其他统一费率送货设置时,它将为它工作,而无需我更改代码。

希望您能理解我的追求。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

要将其用于所有“固定费用”运输方式和某些其他定义的运输方式,您将改为使用以下内容:

add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // HERE define your shipping class to find
    $class = 92;

    // HERE define the shipping methods you want to hide (others than "flat rate")
    $method_key_ids = array('local_pickup:3');

    $found = false;

    // Checking in cart items
    foreach( $package['contents'] as $cart_item ){
        // If we find the shipping class
        if( $cart_item['data']->get_shipping_class_id() == $class ){
            $found = true;
            break; // Stop the loop
        }
    }

    if( ! $found ) 
        return $rates;

    // Loop through shipping methods
    foreach( $rates as $rate_key => $rate ) {
        // Targetting "Flat rate" and other defined shipping mehods
        if( 'flat_rate' === $rate->method_id || in_array($rate->id, $method_key_ids) ) {
            unset($rates[$rate_key]);
        }
    }   

    return $rates;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

  

刷新运输缓存: (必需)

     
      
  1. 此代码已保存在活动主题的function.php文件中。
  2.   
  3. 购物车是空的
  4.   
  5. 在运输区域设置中,禁用/保存任何运输方式,然后启用“后退” /保存。
  6.