为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
凤凰求蛊 2023-10-21 10:11:00
这是场景:我使用 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 运输插件”,因此我可以访问他们的“管理运输方式”插件,该插件允许我执行以下操作:设置多个规则以从各种运输类别中排除各种运输方式。在第一次出现时中断序列。我设置的规则如下:对于 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。对于 151 类 - 未设置:flat_rate:20、flat_rate:21。我在上面的代码中为我想要定位的产品创建了第三个类 182。仅当添加到购物车的该类别商品少于 5 件时,才应将其视为类别 151。但如果购物车中添加 5 件或更多商品,则应将其视为 150 类。这就是我的困境。潜在的解决方案 - 添加:我想出了如何解决我的问题。如果购物车中的产品数量为 5 件或更多,@LoicTheAztec 帮助我的代码可以让我取消给定运输类别的运输方式。我现在需要做的是取消设置其他两种运输方式(flat_rate:20 和 flat_rate:21),这两种运输方式会导致冲突,对于相同的运输类别(182),但这次购物车中的产品数量为 4 或更少( =<)。然后我可以使用现有的插件来创建以下规则:第一次出现时中断(检查)对于 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。对于 182 类 - 未设置:没什么 - 因为两个代码都会创建逻辑对于 151 类 - 未设置:扁平率:20,扁平率:21。这应该可以解决由插件引起的冲突。百万美元的问题是......我可以以某种方式使用@LoicTheAztec 的解决方案来设置某种最小数量吗?
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果特定运输类别的总物品数为 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 ) {

    $targeted_class_ids = array(182); // Shipping Class To Find

    $allowed_max_qty    = 4; // Max allowed quantity for the shipping class

    $shipping_rates_ids = array( // Shipping Method rates Ids To Hide

        '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'

    );

    

    $related_total_qty  = 0;


    // Checking cart items for current package

    foreach( $package['contents'] as $key => $cart_item ) {

        if( in_array( $cart_item['data']->get_shipping_class_id(), $targeted_class_ids ) ){

            $related_total_qty += $cart_item['quantity'];

        }

    }

    

    // When total allowed quantity is more than allowed (for items from defined shipping classes)

    if ( $related_total_qty > $allowed_max_qty ) {

        // Hide related defined shipping methods

        foreach( $shipping_rates_ids as $shipping_rate_id ) {

            if( isset($rates[$shipping_rate_id]) ) {

                unset($rates[$shipping_rate_id]); // Remove Targeted Methods

            }

        }

    }

代码位于活动子主题(或活动主题)的functions.php 文件中。未经测试它应该有效。

刷新运输缓存:

  1. 此代码已保存在您的functions.php 文件中。

  2. 在运输区域设置中,禁用/保存任何运输方式,然后启用返回/保存。

    你已经完成了,你可以测试它。


处理物品数量而不是物品累计数量:

代替:

$related_total_qty += $cart_item['quantity'];

经过

$related_total_qty++;


查看完整回答
反对 回复 2023-10-21
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信