根据运输类别和商品数量添加 Woocommerce 费用

Posted

技术标签:

【中文标题】根据运输类别和商品数量添加 Woocommerce 费用【英文标题】:Add a Woocommerce fee based on shipping class and item quantity 【发布时间】:2019-07-23 09:59:53 【问题描述】:

在 Woocommerce 中,如果购物车商品具有分配给相关产品的特定运输类别,我会尝试添加运费。我希望将此运费乘以购物车商品数量...

当产品被添加到购物车并且数量增加并且额外的运费也增加时,我有这个工作。但是,如果我添加其他具有相同运输等级的产品并增加数量,则额外费用不会增加。

这是我的代码:

// Add additional fees based on shipping class
function woocommerce_fee_based_on_shipping_class( $cart_object ) 

    global $woocommerce;

    // Setup an array of shipping classes which correspond to those created in Woocommerce
    $shippingclass_dry_ice_array = array( 'dry-ice-shipping' );
    $dry_ice_shipping_fee = 70;

    // then we loop through the cart, checking the shipping classes
    foreach ( $cart_object->cart_contents as $key => $value ) 
        $shipping_class = get_the_terms( $value['product_id'], 'product_shipping_class' );
        $quantity = $value['quantity'];

        if ( isset( $shipping_class[0]->slug ) && in_array( $shipping_class[0]->slug, $shippingclass_dry_ice_array ) ) 
            $woocommerce->cart->add_fee( __('Dry Ice Shipping Fee', 'woocommerce'), $quantity * $dry_ice_shipping_fee ); // each of these adds the appropriate fee
        
    

add_action( 'woocommerce_cart_calculate_fees', 'woocommerce_fee_based_on_shipping_class' ); // make it all happen when Woocommerce tallies up the fees

我怎样才能让它也适用于其他购物车项目?

【问题讨论】:

【参考方案1】:

您的代码有点过时并且存在一些错误。要根据产品运输类别和购物车商品数量添加费用,请使用以下命令:

// Add a fee based on shipping class and cart item quantity
add_action( 'woocommerce_cart_calculate_fees', 'shipping_class_and_item_quantity_fee', 10, 1 ); 
function shipping_class_and_item_quantity_fee( $cart ) 

    ## -------------- YOUR SETTINGS BELOW ------------ ##
    $shipping_class = 'dry-ice-shipping'; // Targeted Shipping class slug
    $base_fee_rate  = 70; // Base rate for the fee
    ## ----------------------------------------------- ##

    $total_quantity = 0; // Initializing

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ) 
        // Get the instance of the WC_Product Object
        $product = $cart_item['data'];

        // Check for product shipping class
        if( $product->get_shipping_class() == $shipping_class ) 
            $total_quantity += $cart_item['quantity']; // Add item quantity
        
    

    if ( $total_quantity > 0 ) 
        $fee_text   = __('Dry Ice Shipping Fee', 'woocommerce');
        $fee_amount = $base_fee_rate * $total_quantity; // Calculate fee amount

        // Add the fee
        $cart->add_fee( $fee_text, $fee_amount );
    

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

完美!非常感谢,它完全符合我的要求。 您知道如何或是否可以将运输等级限制在某些国家,例如英国? 干冰运费只适用于英国或爱尔兰的客户,其他国家/地区不适用。我在想,如果账单/送货国家/地区不是英国或爱尔兰,则可以取消设置 $shipping_class。 我添加了代码' if( in_array( WC()->customer->Get_shipping_country(), array( 'GB', 'IE' ) ) ) return; ' 并且它取消了英国和爱尔兰的干冰运输类别,但它使其可用于其他国家/地区。应该反过来。 试试下面的代码行:if( ! in_array( WC()->customer->Get_shipping_country(), array( 'GB', 'IE' ) ) ) return; ...它会工作(我忘了!【参考方案2】:

如果购物车中有一个运输类别,则不应收取任何费用,但如果有多个运输类别,则应额外支付 1 欧元的手续费,并且每增加一个运输类别。

情况 1:将配送类别(仓库 1)的产品添加到购物车 = 无额外费用

情况 2:将运输类别(仓库 1)的产品添加到购物车,将其他运输类别(仓库 2)的产品添加到购物车 = 1x 手续费添加到购物车 小计: 产品 2x - 10 欧元 免运费 手续费 1x - 1Eur 总计 - 11 欧元

情况 3:运输类别(仓库 1)的产品添加到购物车,运输类别(仓库 2)的产品添加到购物车,运输类别(仓库 3)的产品添加到购物车 = 2x 手续费添加到购物车 小计: 产品 3x - 15 欧元 免运费 手续费 2x - 1Eur 总计 - 12 欧元

【讨论】:

以上是关于根据运输类别和商品数量添加 Woocommerce 费用的主要内容,如果未能解决你的问题,请参考以下文章

根据 WooCommerce 中的运输类别自定义计算的运输成本

在 WooCommerce 购物车页面中的每个产品下方添加运输类别

获取购物车商品名称、数量所有详细信息 woocommerce

根据 Woocommerce 中的运输方式和付款方式添加费用

ajax 上的 JS 警报添加到购物车以获取 Woocommerce 中的特定产品类别计数

WooCommerce购物车 - 条件商品类别验证