当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce中隐藏和取消隐藏基于运输类的特定运输方法

申黎明
2023-03-14

我的购物车有三种方式:标准配送(0-10kg)、标准配送(11-20kg)和次日配送(0-20kg),我的问题是,当我将冷冻食品配送类别的产品运送到购物车时,配送方式应该是次日配送,如果购物车上现在有配送类别,则只有标准配送,我的问题是,当一个添加了装运类别的产品和一个没有装运类别的产品时,它将不符合我所做的条件。

add_filter( 'woocommerce_package_rates', 'custom_hide_shipping_methods', 10, 2 );
function custom_hide_shipping_methods( $rates, $package ) {
    foreach( WC()->cart->get_cart() as $cart_item  ) {
        $product = $cart_item[ 'data' ]; // The WC_Product object
        if( $product->get_shipping_class_id() == 149 ) { // <== ID OF MY SHIPPING_CLASS
            unset( $rates['shipping_by_rules:16'] ); // standard delivery
             wc_add_notice( sprintf( __( '1', 'woocommerce' ), $weight ), 'error' );
        }else if($product->get_shipping_class_id() == NULL){
            unset( $rates['shipping_by_rules:15'] ); // next day delivery
             wc_add_notice( sprintf( __( '2', 'woocommerce' ), $weight ), 'error' );
        }else if($product->get_shipping_class_id() !=  || $product->get_shipping_class_id() == 149){
            unset( $rates['shipping_by_rules:16'] ); // standard delivery
             wc_add_notice( sprintf( __( '3', 'woocommerce' ), $weight ), 'error' );
        }
        break; // we stop the loop
    }
    return $rates;
}

共有1个答案

岳风畔
2023-03-14

更新2:你的代码中有很多错误…

您的代码中缺少装运方法,因为您只有2个:

  • “按规则发货:16”==

但标准交货(11-20公斤)如何

您应该尝试以下方法:

add_filter( 'woocommerce_package_rates', 'custom_hide_shipping_methods', 20, 2 );
function custom_hide_shipping_methods( $rates, $package ) {
    $targeted_class_id = 149;  // <== ID OF MY SHIPPING_CLASS
    $has_class = $has_no_class = false;
    
    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item  ) {
        $shipping_class = $cart_item['data']->get_shipping_class_id();
        # $weight = $cart_item['data']->get_weight();
        
        if( $shipping_class == $targeted_class_id ) 
            $has_class = true;
        elseif( empty( $shipping_class ) )
            $has_no_class = true;
    }
    // Unseting shipping methods
    if( $has_class ) 
    { // CASE 1 and 3
        unset( $rates['shipping_by_rules:16'] ); // standard delivery
        # wc_add_notice( sprintf( __( '1 | %s', 'woocommerce' ), $weight ), 'error' );
    }
    elseif( ! $has_class && $has_no_class )
    { // CASE 2
        unset( $rates['shipping_by_rules:15'] ); // next day delivery
        # wc_add_notice( sprintf( __( '2 | %s', 'woocommerce' ), $weight ), 'error' );
    }
    elseif( $has_class && $has_no_class ) // ==> Optional (You may not neeed it)
    { // CASE 3
        unset( $rates['shipping_by_rules:16'] ); // standard delivery
        # wc_add_notice( sprintf( __( '3 | %s', 'woocommerce' ), $weight ), 'error' );
    }
    return $rates;
}

代码进入函数。活动子主题(或活动主题)的php文件。

它应该有效。

 类似资料:
  • 输入一个语句后按回车键,MATLAB自动在屏幕上显示结果,但如果该行命令是以";"结尾,则MATLAB仍会进行运算赋值,但不显示任何输出结果.这一点在生成复杂矩阵时特别有用.例如: A = magic(100);

  • 我实现了动态的列可见性来隐藏/显示列,例如和来显示/隐藏列5。我也有一个的回调,比方说,它用第5列中的文本制作了一个html按钮。 目前在中,我检查,如果为真,则继续执行

  • 问题内容: 我知道命令行界面(例如Git等)能够隐藏用户的输入(对于密码有用)。有没有办法用Java编程地做到这一点?我正在从用户那里输入密码,我希望他们的输入在该特定行(而不是所有用户)上被“隐藏”。这是我的代码(尽管我怀疑这会有所帮助…) 问题答案: 尝试。不过,您至少必须运行Java 6。 请注意,这不适用于Eclipse控制台。您必须从 真实的 console / shell / term

  • 我想使用Selenium ChromeDriver打开Chrome浏览器,而不让Chrome消息输出到控制台。 我想隐藏输出消息"DevTools监听..." 但这一信息仍在显现。如何隐藏输出消息“DevTools侦听…”用Python?

  • 我有一个代码与许多评论,我如何可以隐藏这些,但没有删除,我需要他们之后。

  • 问题内容: 是否可以将某些字段排除在json字符串中? 这是一些伪代码 我想排除privateProperty1和privateproperty2出现在json字符串中 所以我想,我可以使用stringify replacer函数 并在串 但是在jsonString中,我仍然将其视为 我想在其中没有privateproperties的字符串。 问题答案: 在Mozilla的文档说回报(而不是):

  • 对于 被选中的国家 ,只显示 输入线 或者 输出线   只显示输入线   只显示输出线 controller.showInOnly(true); controller.showInOnly(false); controller.showOutOnly(true); controller.showOutOnly(false);

  • 我们的商业产品种类繁多,其中一些不是我们自己的,也不是我们自己供应的。我正在尝试设置一个功能,如果购物车中的产品属于“额外”运输类别,则禁用免费运输。 如果有任何其他产品不属于运输类别“额外”,免费送货仍然适用。因此,如果购物车中有5种产品都属于运输类别“额外”,而没有其他产品,将收取5美元的费用。如果有任何其他产品不在该运输类别,免费送货再次适用。 我在互联网上搜寻解决方案,到目前为止,我得到的