当 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 电子邮件通知中隐藏本地取货的送货地址