【问题标题】:WooCommerce Quick cart feeWooCommerce 快速购物车费用
【发布时间】:2017-09-06 20:41:05
【问题描述】:

如果所有定义的类别中的产品总数为 1,我想为某些类别添加费用,如果数量为 2-9,我想单独收费。(即,如果他们只订购,则产品加 10 美元1,如果他们订购 2-9 件商品,每件商品 +5 美元)。

我从这个基地开始:Custom Fee based on product dimensions and categories

我已经做了一些更改,但我无法让它工作并且我被卡住了。

这是我的代码:

add_action( 'woocommerce_cart_calculate_fees','custom_applied_fee');
function custom_applied_fee() {

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

    // Set HERE your categories (can be an ID, a slug or the name… or an array of this)
    $category1 = 'plain';
    $category2 = 'plywood';

    // variables initialisation
    $fee = 0;

    // Iterating through each cart item
    foreach(WC()->cart->get_cart() as $cart_item){
        // Get the product object
        $product = new WC_Product( $cart_item['product_id'] );
        $quantiy = $value['quantity']; //get quantity from cart

        // Initialising variables (in the loop)
        $cat1 = false; $cat2 = false;

        // ## CALCULATIONS ## (Make here your conditional calculations)
        $quantity = GET TOTAL QUANTITY
        if($quantity <= 1){
            $fee += 10 * $quanity;
        } elseif($quantity > 1 && $dimention <= 9){
            $fee += 5 * $quanity;
        } elseif($dimention > 10){
            $fee += 1 * $quanity;
        }
    }

    // Adding the fee
    if ( $fee != 0 )
        WC()->cart->add_fee( $fee_text, $fee, true );
}

我做错了什么?我怎样才能让它工作?

【问题讨论】:

    标签: php wordpress woocommerce cart fee


    【解决方案1】:

    更新 2

    您的需求不是很清楚,所以我已经尽力做到最好。我了解到您要补充:

    • 当有 1 个来自已定义产品类别的购物车商品时,收取固定的初始费用。
    • 当有(从 2 到 9 个)来自已定义产品类别的购物车商品时,根据购物车商品总数计算的费用。

    下面是对应的代码:

    add_action( 'woocommerce_cart_calculate_fees','conditional_custom_multiple_fees', 10, 1 );
    function conditional_custom_multiple_fees( $cart_object ) {
    
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        // Set HERE your categories (can be an ID, a slug or the name… or an array of this)
        $product_categories = array('clothing', 'disc');
        $cat_qty = 0;
        $cart_total_qty = $cart_object->get_cart_contents_count();
    
        // Iterating through each cart item
        foreach( $cart_object->get_cart() as $cart_item ){
            $product = $cart_item['data']; // The product object
            $item_qty = $cart_item['quantity']; // Item quantity
    
            // Counting quanties for the product categories
            if( has_term( $product_categories, 'product_cat', $cart_item['data']->get_id() ) )
                $cat_qty += $cart_item['quantity'];
        }
    
        ##  --  --  --  --  CALCULATIONS AND CONDITIONAL FEES  --  --  --  --  ##
    
        // 1. A fee for the product defined categories for 1 cart item only
        if($cat_qty == 1) // updated HERE
        {
            $fee_amount = 10;
            $cart_object->add_fee( __( "Fee (1)" ), $fee_amount, true );
        }
    
        // 2. Or a calculated fee for the defined product categories (qty from 2 to 9)
        if( $cat_qty >= 2 && $cat_qty <= 9 )
        {
            $amount_by_item = 5; // amount by item (updated)
            $calculated_fee = $amount_by_item * $cat_qty;  // calculation (updated)
            $cart_object->add_fee( __( "Fee (2 to 9)" ), $calculated_fee, true );
        }
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

    此代码已经过测试并且可以工作。

    【讨论】:

    • @SHONWILLIAMS 按照您的建议进行了更新。但是刚刚将if($cat_qty = 1) 替换为if($cat_qty == 1)……抱歉造成这种误解。
    • @SHONWILLIAMS 再次抱歉造成误解,当母语不同并且人们尽量用英语写作时,不容易理解。 (如果您可以删除一些不再需要的 cmets,那就太好了)谢谢。
    【解决方案2】:

    感谢LoicTheAztec 我认为只需稍作修改,您的代码就可以工作...

    add_action( 'woocommerce_cart_calculate_fees','conditional_custom_multiple_fees', 10, 1 );
    function conditional_custom_multiple_fees( $cart_object ) {
    
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    
    // Set HERE your categories (can be an ID, a slug or the name… or an array of this)
    $product_categories = array('clothing', 'disc');
    $cat_qty = 0;
    $cart_total_qty = $cart_object->get_cart_contents_count();
    
    // Iterating through each cart item
    foreach( $cart_object->get_cart() as $cart_item ){
        $product = $cart_item['data']; // The product object
        $item_qty = $cart_item['quantity']; // Item quantity
    
        // Counting quanties for the product categories
        if( has_term( $product_categories, 'product_cat', $cart_item['data']->get_id() ) )
            $cat_qty += $cart_item['quantity'];
    }
    
    ##  --  --  --  --  CALCULATIONS AND CONDITIONAL FEES  --  --  --  --  ##
    
    // 1. The 1st fee for the product defined categories (qty = 1)
    if($cat_qty = 1)
    {
        $fee_amount = 10;
        $cart_object->add_fee( __( "Fee (1)" ), $fee_amount, true );
    }
    
    // 2. The Separate  additional fee for the defined product categories (qty from 2 to 9)
    if( $cat_qty >= 2 && $cat_qty <= 9 )
    {
        $amount_by_item = 5; // amount by item
        $calculated_fee = $cat_qty * $amount_by_item;  // calculation
        $cart_object->add_fee( __( "Fee (2 to 9)" ), $calculated_fee, true );
    }
    

    }

    【讨论】:

    • 为了使这项工作完美,您只需将if($cat_qty = 1) 替换为if($cat_qty == 1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多