如果购物车有超过 4 件特定运输类别的商品,则隐藏一些运输方式

这是场景:


我使用 UPS 运送饮料托盘。然而,将5盘饮料装进盒子里就变得非常困难。因此,我想禁用 UPS 运输方式,并且仅在客户订购 5 盘或以上饮料时才显示统一费率运输。我有大约 7 种不同的饮料,但我可以将这些饮料添加到运输类别中以简化代码。


我想扩展此代码以包含特定类别中的产品数量,或者可能是运输类别中的产品出现的次数。因此,如果购物车有 5 个或更多此特定运输类别的产品,则应删除我在数组下指定的运输方式。


如何扩展此代码以包括产品数量?


// 如果我们发现运输类别和运输类别中的产品数量等于或大于 5。


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;


    // Shipping Class To Find

    $class = 182;


    // Number Of Shipping Class Items In Cart

    $amount = 5;


    // Shipping Methods To Hide

    $method_key_ids = array('wf_shipping_ups:07', 'wf_shipping_ups:08', 'wf_shipping_ups:11', 'wf_shipping_ups:54', 'wf_shipping_ups:65', 'wf_shipping_ups:70', 'wf_shipping_ups:74', 'free_shipping:2', 'request_shipping_quote');


编辑-添加:

由于我从 PluginHive 购买了“带有打印标签的 WooCommerce UPS 运输插件”,因此我可以访问他们的“管理运输方式”插件,该插件允许我执行以下操作:

设置多个规则以从各种运输类别中排除各种运输方式。在第一次出现时中断序列。

我设置的规则如下:

  1. 对于 150 类(首次出现时中断)- 未设置:

wf_shipping_ups:07、wf_shipping_ups:08、wf_shipping_ups:11、wf_shipping_ups:54、wf_shipping_ups:65、wf_shipping_ups:70、wf_shipping_ups:74、free_shipping:2、request_shipping_quote。

  1. 对于 151 类 - 未设置:flat_rate:20、flat_rate:21。

我在上面的代码中为我想要定位的产品创建了第三个类 182。仅当添加到购物车的该类别商品少于 5 件时,才应将其视为类别 151。

但如果购物车中添加 5 件或更多商品,则应将其视为 150 类。

这就是我的困境。

潜在的解决方案 - 添加:

我想出了如何解决我的问题。如果购物车中的产品数量为 5 件或更多,@LoicTheAztec 帮助我的代码可以让我取消给定运输类别的运输方式。

我现在需要做的是取消设置其他两种运输方式(flat_rate:20 和 flat_rate:21),这两种运输方式会导致冲突,对于相同的运输类别(182),但这次购物车中的产品数量为 4 或更少( =<)。

然后我可以使用现有的插件来创建以下规则:

第一次出现时中断(检查)

  1. 对于 150 级 - 未设置:

wf_shipping_ups:07、wf_shipping_ups:08、wf_shipping_ups:11、wf_shipping_ups:54、wf_shipping_ups:65、wf_shipping_ups:70、wf_shipping_ups:74、free_shipping:2、request_shipping_quote。

  1. 对于 182 类 - 未设置:

没什么 - 因为两个代码都会创建逻辑

  1. 对于 151 类 - 未设置:

扁平率:20,扁平率:21。

这应该可以解决由插件引起的冲突。

百万美元的问题是......我可以以某种方式使用@LoicTheAztec 的解决方案来设置某种最小数量吗?


凤凰求蛊
浏览 104回答 1
1回答

慕哥6287543

如果特定运输类别的总物品数为 5 或更多,以下内容将隐藏特定定义的运输方式:add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );function hide_shipping_method_based_on_shipping_class( $rates, $package ) {&nbsp; &nbsp; $targeted_class_ids = array(182); // Shipping Class To Find&nbsp; &nbsp; $allowed_max_qty&nbsp; &nbsp; = 4; // Max allowed quantity for the shipping class&nbsp; &nbsp; $shipping_rates_ids = array( // Shipping Method rates Ids To Hide&nbsp; &nbsp; &nbsp; &nbsp; 'wf_shipping_ups:07',&nbsp; &nbsp; &nbsp; &nbsp; 'wf_shipping_ups:08',&nbsp; &nbsp; &nbsp; &nbsp; 'wf_shipping_ups:11',&nbsp; &nbsp; &nbsp; &nbsp; 'wf_shipping_ups:54',&nbsp; &nbsp; &nbsp; &nbsp; 'wf_shipping_ups:65',&nbsp; &nbsp; &nbsp; &nbsp; 'wf_shipping_ups:70',&nbsp; &nbsp; &nbsp; &nbsp; 'wf_shipping_ups:74',&nbsp; &nbsp; &nbsp; &nbsp; 'free_shipping:2',&nbsp; &nbsp; &nbsp; &nbsp; 'request_shipping_quote'&nbsp; &nbsp; );&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $related_total_qty&nbsp; = 0;&nbsp; &nbsp; // Checking cart items for current package&nbsp; &nbsp; foreach( $package['contents'] as $key => $cart_item ) {&nbsp; &nbsp; &nbsp; &nbsp; if( in_array( $cart_item['data']->get_shipping_class_id(), $targeted_class_ids ) ){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $related_total_qty += $cart_item['quantity'];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; // When total allowed quantity is more than allowed (for items from defined shipping classes)&nbsp; &nbsp; if ( $related_total_qty > $allowed_max_qty ) {&nbsp; &nbsp; &nbsp; &nbsp; // Hide related defined shipping methods&nbsp; &nbsp; &nbsp; &nbsp; foreach( $shipping_rates_ids as $shipping_rate_id ) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( isset($rates[$shipping_rate_id]) ) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unset($rates[$shipping_rate_id]); // Remove Targeted Methods&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }代码位于活动子主题(或活动主题)的functions.php 文件中。未经测试它应该有效。刷新运输缓存:此代码已保存在您的functions.php 文件中。在运输区域设置中,禁用/保存任何运输方式,然后启用返回/保存。你已经完成了,你可以测试它。处理物品数量而不是物品累计数量:代替:$related_total_qty&nbsp;+=&nbsp;$cart_item['quantity'];经过$related_total_qty++;
打开App,查看更多内容
随时随地看视频慕课网APP