如何在某些条件下隐藏 WooCommerce 运输方式

已发表: 2020-06-15

运输方式是客户在购买任何商品时在结账时看到的服务和费用。 这将是电子商务商店获得顺畅交付体验的重要选择。

作为电子商务解决方案,WooCommerce 还提供免费送货统一费率本地取货等送货方式,可以根据地点为不同的送货区域设置。 例如,免费送货选项仅适用于靠近商店位置的特定范围的邮政编码,而统一费率选项适用于送货区域的其他部分。

Default Shipping Methods
默认运输方式

插件可以很容易地实现基于位置的运输选项,但在某些情况下,位置不发挥重要作用,店主很难实现这一点。 条件可能是:

  1. 如果订单重量超过一定数量的磅或公斤,则某些运输方式(如免费送货)将不可用。
  2. 某些运输方式的可用性还取决于数量或整个订单的价格。 例如,如果订单总额超过 250 美元,则应仅提供免费送货方式,不提供付费送货方式。

可能有更多此类条件需要在结帐期间显示或隐藏运输方式,但在这篇文章中,我们将解释上述 2。要为您的 WooCommerce 商店实现这一点,您可以添加代码片段或使用任何运费可用的插件

使用代码片段

让我们以上面提到的条件 1 为例,如果订单重量超过 5 公斤,则不应提供免费送货服务。 您可以通过在当前活动主题的 functions.php 文件中添加以下代码来实现此目的。

注意:这些更改可以被当前主题的更新覆盖,因此建议创建一个子主题并在子主题的functions.php文件中添加所需的代码片段。 或者您可以使用代码片段插件添加自定义片段。

 /** 
 * 订单重量超过 10 公斤时隐藏免费送货。 
 * 
 * @param array $rates 为包找到的费率数组。 
 * @return 数组 
 */ 
功能 ts_hide_free_shipping_for_order_weight( $rates, $package ) { 
    $order_weight = WC()->cart->get_cart_contents_weight(); 
 
    如果 ( $order_weight > 5 ) { 
        foreach( $rates as $rate_id => $rate_val ) { 
            if ('free_shipping' === $rate_val->get_method_id()) { 
                未设置($rates[$rate_id]);
            } 
        } 
    } 
    返回 $rates; 
} 

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

这里woocommerce_package_rates过滤器用于修改购物车上的计算费率。 它包含将产品添加到购物车后可用的所有运费。 因此,如果订单重量超过 5 公斤,我们需要从此过滤器返回的数组中取消设置所需的运输方式,在我们的例子中为免费运输。

产品页面:

Product with 6kg weight
产品重量 6kg

带有运输方式的购物车页面:

Free shipping is not available for the product with weight more than 5kg
重量超过 5 公斤的产品不提供免费送货服务

在 WooCommerce 购物车上隐藏运输方式的另一个例子是,当订单总额超过 250 美元时,在结账时只允许免费送货。 这可以通过在 functions.php 文件中添加以下代码来实现。

 /**
 * 当订单总额超过 250 美元时隐藏运费。
 *
 * @param array $rates 为包找到的费率数组。
 * @return 数组
 */
函数 ts_hide_shipping_for_order_total( $rates ) {
  $免费 = 数组();

  $order_total = WC()->购物车->get_subtotal();
  
  如果($order_total > 250){
    foreach ( $rates as $rate_id => $rate ) {
      if ( 'free_shipping' === $rate->get_method_id() ) {
        $free[ $rate_id ] = $rate;
      }
    }
  }
  返回 ! 空($免费)? $free : $rates;
}
add_filter('woocommerce_package_rates','ts_hide_shipping_for_order_total',100);

在这里,当订单总额超过 250 美元时,过滤器会返回一个只有免费送货方式的数组,否则会返回所有运费。

Hide Shipping Rate when Order total is more than $250
订单总额超过 250 美元时隐藏运费

在上面的例子中,我们参考了 Free Shipping 方法,所以使用的方法 id 是 free_shipping。 要更改其他运输方式,方法 ID 为:

本地取货: local_pickup
统一费率: flat_rate

get_method_id() 函数仅获取所有运输区域的 3 种方法的方法 ID,而不是单个运输区域的单个方法的方法 ID,因此它将隐藏结帐期间可用的所有统一费率、本地取货或免费送货方式。 但是,如果您想隐藏特定的运输方式,则需要使用运输方式 ID 和实例 ID 的组合。

例如,“flat_rate:3”,其中 3 是为数据库中某个区域的每种运输方式存储的唯一实例 ID。 您可以通过右键单击运输方式并在浏览器的开发人员工具中检查元素来找到运输方式的实例 ID。

Instance ID

为运输方式使用不同的 WooCommerce 扩展

有多种付费或免费扩展可用于为不同条件设置运输方式。 一些最常用的插件是:

付费插件:

  1. WooCommerce 的Table Rate Shipping :此插件扩展了WooCommerce 的默认运输选项,为您提供高度可定制的运输选项。
  2. WooCommerce 的高级统一运费插件:此插件将帮助您根据高级运费规则配置商店的运费。
  3. Jeroen sormani 的 WooCommerce Advance Shipping 插件:此插件允许您在结帐期间根据设定的规则启用运输方式。 可以为不同的购物车详细信息、产品详细信息或不同的用户详细信息设置规则。
  4. WP Desk 为 WooCommerce 提供的灵活运输专业版:此插件允许您根据特定项目、购物车行项目、价格或重量规则启用运输方式。

免费插件:

上述一些插件也有免费版本,但功能有限。 他们是:

  1. Jeroen Sormani 的 WooCommerce Advanced Free Shipping:这是 WooCommerce Advanced Shipping 插件的免费版本。 这两个插件的唯一区别是这个插件只允许设置规则的免费送货方式,而付费插件允许所有送货方式。
  2. WP Desk 为 WooCommerce 提供灵活运输:这是 WooCommerce 插件的灵活运输 Pro 的免费版本。 它只允许为价格和重量设置运输方式。

有关上述插件的详细说明,您可以查看此帖子。

结论

正如我们在这篇文章中看到的那样,可以通过简单地在您的网站上添加代码片段或使用各种可用的插件来实现提前发货选项。 因此,您可以试用给定的代码片段或试用任何插件,让我们知道这是否对您的 WooCommerce 商店有益。