WooCommerce - 当免费送货可用时隐藏其他送货方式

Posted

技术标签:

【中文标题】WooCommerce - 当免费送货可用时隐藏其他送货方式【英文标题】:WooCommerce - Hide other shipping methods when FREE SHIPPING is available 【发布时间】:2016-11-11 20:18:39 【问题描述】:

当 Woocommerce 提供免费送货服务时,我想隐藏其他送货选项。

因为即使有免费送货选项,现在最新版本的 woocommerce 仍然显示其他送货选项。

请帮忙

【问题讨论】:

【参考方案1】:

WooCommerce 2.6+ 有这个最近的代码 sn-p。你可以使用:

add_filter( 'woocommerce_package_rates', 'hide_other_shipping_when_free_is_available', 100, 2 );

function hide_other_shipping_when_free_is_available( $rates, $package ) 

    $free = array();
    foreach ( $rates as $rate_id => $rate ) 
        if ( 'free_shipping' === $rate->method_id ) 
            $free[ $rate_id ] = $rate;
            break;
        
    
    return ! empty( $free ) ? $free : $rates;

您需要刷新运输缓存数据:在woocommerce运输设置中禁用、保存和启用、保存当前运输区域的相关运输方式。


对于 WooCommerce 2.5,您应该试试这个:

add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );

function hide_shipping_when_free_is_available( $rates, $package ) 
    
    // Only modify rates if free_shipping is present
    if ( isset( $rates['free_shipping'] ) ) 
    
        // To unset a single rate/method, do the following. This example unsets flat_rate shipping
        unset( $rates['flat_rate'] );
        
        // To unset all methods except for free_shipping, do the following
        $free_shipping          = $rates['free_shipping'];
        $rates                  = array();
        $rates['free_shipping'] = $free_shipping;
    
    
    return $rates;

将此代码粘贴到位于活动子主题或主题中的 function.php 文件中。


参考:Hide other shipping methods when FREE SHIPPING is available (official doc)

相关:

How to hide free shipping when there is shipping costs in WooCommerce Hide specifics Flat Rates when Free Shipping is available in WooCommerce 3 WooCommerce: Hide other shipping methods except local pickup when free shipping is available WooCommerce Free Shipping if over 5 pounds

【讨论】:

我应该在哪里调用这个函数? 我会像这样调用这个函数 add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );在function.php上? @LoicTheAztec 你不需要调用它……只需将所有的 sn-p 粘贴到你的活动主题的 function.php 文件中……这将完成这项工作。为什么?因为此功能与 woocommerce 核心中的 woocommerce_package_rates 挂钩……请参阅:Hooks: Action and Filter reference 建议将其转换为插件或site specific snippets plugin,这样它就不会与主题相关联。但这绝对是 WC2.6 代码,因为这是 Woo 开发人员在他们的 gist 中建议的

以上是关于WooCommerce - 当免费送货可用时隐藏其他送货方式的主要内容,如果未能解决你的问题,请参考以下文章

php WooCommerce - 在免费提供时隐藏所有其他送货方式

隐藏订阅价格和详细信息 WooCommerce 免费样品

从 Woocommerce 订阅价格中隐藏“免费试用”文本

从 Woocommerce 订阅价格中隐藏“免费试用”文本,但保留注册费

php 来自WooCommerce POS的隐藏费用和送货按钮

当 WooCommerce 购物车包含虚拟产品时,如何隐藏结帐日期选择器?