基于购物车项目数的WooCommerce中特定运输类别的购物车消息

问题描述

这是根据Cart Message for a Specific Shipping Class in WooCommerce答案和Show or hide shipping methods based on number of cart items for specific shipping class答案改编而成的。

这是我的代码尝试:


add_action( 'woocommerce_before_calculate_totals','cart_items_shipping_class_message',20,1 );
function cart_items_shipping_class_message( $cart ){

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    $shipping_class_id = '150'; // Your shipping class Id
    
    $allowed_max_qty     = 4; // Max allowed quantity for the shipping class
      
    $related_total_qty   = 0; // Initializing

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ) {
        if( ( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ) ){
            $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 ) {
            wc_clear_notices();
            wc_add_notice( sprintf('Beers can only be shipped via pallet shipping. To reveal much cheaper UPS Shipping Rates,remove Beers from the Cart.','woocommerce'),'notice' );
            break;
        }
    }
}


但是它似乎没有用。有什么想法吗?

更新:我开始工作了。这是代码


add_action( 'woocommerce_before_calculate_totals','notice' );
        }
}


解决方法

工作正常。


add_action( 'woocommerce_before_calculate_totals','cart_items_shipping_class_message',20,1 );
function cart_items_shipping_class_message( $cart ){

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    $shipping_class_id = '150'; // Your shipping class Id
    
    $allowed_max_qty     = 4; // Max allowed quantity for the shipping class
      
    $related_total_qty   = 0; // Initializing

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ) {
        if( ( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ) ){
            $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 ) {
            wc_clear_notices();
            wc_add_notice( sprintf('Beers can only be shipped via pallet shipping. To reveal much cheaper UPS Shipping Rates,remove Beers from the Cart.','woocommerce'),'notice' );
        }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...