WooCommerce。基于装运类别的每个订单的最大重量

时间:2021-06-29 作者:manx

我需要设置每个订单的最大重量125kg,但仅适用于装运类别为“的产品”;sypkie;。我有下面的代码,它可以工作,但对于购物车中的所有产品。我想让它只适用于带有;sypkie“;装运类别。

add_action(\'woocommerce_check_cart_items\',\'check_cart_weight\');

function check_cart_weight(){
    global $woocommerce;
    $weight = $woocommerce->cart->cart_contents_weight;
    if( $weight > 20 ){
        wc_add_notice( sprintf( __( \'You have %sKg weight and we allow only 20Kg of weight per order.\', \'woocommerce\' ), $weight ), \'error\' );
    }
}
如何修改此代码以使用shipping类?非常感谢。

1 个回复
SO网友:Spiricle

这样可以做到:

add_action(\'woocommerce_check_cart_items\',\'check_cart_weight\');
add_action(\'woocommerce_checkout_process\', \'check_cart_weight\' );

function check_cart_weight()
    {
    $cart = WC()->cart;
    if(!$cart) return;
    $weight = 0;
    foreach($cart->get_cart_contents() as $item)
        {
        if(!isset($item[\'product_id\'])) continue;
        $prod = wc_get_product($item[\'product_id\']);
        if($prod->get_shipping_class()!==\'sypkie\') continue;
        $weight += ($item[\'quantity\'] * (float)$prod->get_weight());
        };
    if( $weight > 125 )
        {
        $error =  sprintf( __( \'You have %sKg weight and we allow only 125Kg of weight per order.\', \'woocommerce\' ), $weight);
        if(is_checkout()) { wc_add_notice($error, \'error\'); } else { wc_print_notice($error, \'error\'); };
        };
    }
这将检查购物车中的项目,检查其装运类别(通过slug 并将其重量相加。我还向操作woocommerce\\u checkout\\u过程添加了相同的函数,该过程在签出页面上显示相同的消息。

相关推荐