Quantity discount on 2nd item only in Woocommerce

后端 未结 3 974
故里飘歌
故里飘歌 2021-01-16 04:41

I want to achieve a global discount for all products but only for the 2nd product item.

What do I mean? If the customer buys \"Jacket\" no discount is given.

相关标签:
3条回答
  • 2021-01-16 05:02
    foreach ( $cart->cart_contents as $key => $values ) {
                        $product_id = $values['product_id'];
    
                        foreach ($cart->get_cart_item_quantities() as $key => $value){
                            //print_r($key[1]);
                            $key = array_keys($cart->get_cart_item_quantities())[1];
                            if($key == $product_id){
    
                                $product = wc_get_product($product_id);
                                $get_price = $product->get_price();
                                $new_price = $get_price / 2;
                                $values['data']->set_price($new_price);
    
                                break;
                            }
                        }
                    }
    //Please try this, it will work for sure in same above hook :)
    
    0 讨论(0)
  • 2021-01-16 05:11

    You could use the Fee API to get a discount (20%) on the 2nd item only this way:

    add_action( 'woocommerce_cart_calculate_fees', 'second_item_discount', 10, 1 );
    function second_item_discount( $cart ) {
    
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        $percentage = 20; // 20%
        $discount   = 0;
    
        // Loop through cart items
        foreach ( $cart->get_cart() as $cart_item ) {
            // When quantity is more than 1
            if( $cart_item['quantity'] > 1 ){
                // 20% of the product price as a discount
                $discount += wc_get_price_excluding_tax( $cart_item['data'] ) * $percentage / 100;
            }
        }
        if( $discount > 0 )
            $cart->add_fee( __( '2nd item discount', 'woocommerce' ) , -$discount );
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and works.

    0 讨论(0)
  • 2021-01-16 05:11
    add_action( 'woocommerce_before_calculate_totals', 'set_the_discount' );
    
    function set_the_discount( $cart ) {
    
    foreach ( $cart->cart_contents as $key => $value ) {    
    
        //please check whether your item is the second item of your cart or not?
    
        //if this is your second item in your cart
    
        //Set the 50% discount
    
        $product_id = $value['product_id'];
        $product = wc_get_product($product_id);
        $get_price = $product->get_price();
        $new_price = $get_price / 2;
        $value['data']->set_price($new_price);
      }
    
    }
    This hook can be used to set the price directly to the cart. Hope this may help
    
    0 讨论(0)
提交回复
热议问题