当 WooCommerce 3 中提供免费送货时,隐藏细节统一费率

Posted

技术标签:

【中文标题】当 WooCommerce 3 中提供免费送货时,隐藏细节统一费率【英文标题】:Hide specifics Flat Rates when Free Shipping is available in WooCommerce 3 【发布时间】:2018-03-05 14:07:14 【问题描述】:

在 WooCommerce 3 中,我有以下运输选项(设置):

    免费送货:free_shipping:1 - 最低订单金额设置为$50。 正常发货flat_rate:3 - 金额$5。 快递flat_rate:5 - 金额$10

我希望 快递运输 选项始终可用(如图所示)。

但是当 免费送货 可用时(意味着客户的购物车中的金额超过 50 美元),我只想隐藏 正常送货

因此,当 Free shipping 可用(并隐藏)时,可用的运费将是普通运送和快递运送。

这可能吗?我怎样才能在 WooCommerce 3 上获得这个?

【问题讨论】:

这个插件将使这项工作更容易 - elextensions.com/plugin/… 【参考方案1】:

基于the official WooCommerce snippet code,进行一些轻微的更改,您将能够在免费送货时仅隐藏您的第一个统一费率:

add_filter( 'woocommerce_package_rates', 'conditionally_hide_shipping_methods', 100, 2 );
function conditionally_hide_shipping_methods( $rates, $package ) 
    // HERE yours 2nd flat rate "Express Shipping" (that you never hide) in the array:
    $flat_rates_express = array( 'flat_rate:5', 'flat_rate:12', 'flat_rate:14' );

    $free = $flat2 = array();
    foreach ( $rates as $rate_key => $rate ) 
        // Updated Here To 
        if ( in_array( $rate->id, $flat_rates_express ) )
            $flat2[ $rate_key ] = $rate;
        if ( 'free_shipping' === $rate->method_id )
            $free[ $rate_key ] = $rate;
    
    return ! empty( $free ) ? array_merge( $free, $flat2 ) : $rates;

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

在 WooCommerce 3 上测试并有效。

刷新发货缓存: 1) 首先清空您的购物车。 2) 此代码已保存在您的 function.php 文件中。 3) 进入运输区域设置并禁用一个“统一费率”(例如) 和“保存”。然后重新启用“统一费率”和“保存”。 您已完成,您可以对其进行测试。

【讨论】:

您好 Loic,非常感谢您的帮助。你不知道我对你的好意帮助有多感激。 :) 它非常适合我的 1 区。但是对于我的 2 区和 3 区,它只显示免费送货,但不显示特快送货选项。我相信这是因为对于每个运输区域,每个快递运输都有不同的费率 ID。例如,Zone 2 的 Express Shipping Rate ID 是 flat_rate:12, Zone 3 的 Express Shipping Rate ID 是 flat_rate:14。如何更改代码或我的设置,以便条件费率适用于所有 3 个区域?谢谢!

以上是关于当 WooCommerce 3 中提供免费送货时,隐藏细节统一费率的主要内容,如果未能解决你的问题,请参考以下文章

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

以编程方式为 WooCommerce 订阅中的购物车项目设置免费试用

Woocommerce 结帐页面先显示送货地址,然后显示帐单地址?

在 WooCommerce 电子邮件通知中隐藏本地取货的送货地址

php Woocommerce提供免费无线网络连接1странице

php 如果在结账时使用优惠券,请删除WooCommerce中的免费送货服务