【问题标题】:Hide all Flat rate Shipping methods for specific shipping classes in WooCommerce隐藏 WooCommerce 中特定运输类别的所有统一运费运输方式
【发布时间】:2019-09-04 20:59:05
【问题描述】:

我正在建立一个包含运输的网站,但我有针对所有运输区域收集的物品和可以在所有运输区域发送的物品。

所以我已经为所有区域设置了运输等级。

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

但是 不是放入每个 flat_rate id 而是有一种方法可以定位所有统一费率运输方式,所以当我添加其他统一费率运输设置时,它会为它工作,而无需我对代码进行更改。

我希望你明白我在追求什么。任何帮助表示赞赏。

【问题讨论】:

    标签: php wordpress woocommerce cart shipping-method


    【解决方案1】:

    要将其用于所有“统一费率”运输方式和其他一些已定义的运输方式,您将改用以下方式:

    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. 在配送区域设置中,禁用/保存任何配送方式,然后启用返回/保存。

    【讨论】:

    • 嗨,感谢您的代码,但它对我不起作用,抱歉,当我在 $method_key_ids 部分中输入 local_pickup 时,它会删除该运输方式,但它不会删除任何 flat_rate 运输?我已经清除了所有缓存,并重新设置了我的所有运输区域设置,但它不会删除任何 flat_rate 运输?
    • 我在此代码上尝试了不同的方法,但无法删除 flat_rate 方法,我只是不知道,正如我所说,如果将 local_pickup 放入 methods_key_ids 数组中,它会删除我还为此添加了一个 flat_rate 方法并将其删除,但是代码并没有自动删除 flat_rate 方法,有什么想法吗??
    • @MotoBid 我已经测试了此代码,它在我的测试服务器上按预期工作:当在购物车物品中找到特定的运输类别时,所有统一费率都将被删除,同时指定的运输方式 ID...
    • 嗨,代码应该可以工作,但它对我不起作用,我在一个多供应商网站上设置它,在那里我设置运输区域和运输类别,然后在我的网站上设置供应商设置自己的 flat_rate 运输方式,这会阻止此代码以任何方式工作吗?正如我所说,当我将信息放入 method_key_ids 时,它们会被删除,但我所有的 flat_rate 方法都会保留?我只是不明白它..
    • 感谢您在此问题上的帮助,我无法让此代码工作,因此我查看了您处理的另一个代码,发现“如果运输类别适用于所有购物车商品,则取消设置运费WooCommerce”对我有用,我确实对其进行了一些修改以删除本地取货,它可能不是最好的编码,但它对我有用,我很高兴你有时间帮忙,我谢谢你。
    猜你喜欢
    • 2019-10-17
    • 2014-07-05
    • 2018-07-10
    • 2021-02-04
    • 2021-07-03
    • 1970-01-01
    • 2015-01-03
    • 2018-11-28
    相关资源
    最近更新 更多