Ich möchte einen globalen Rabatt für alle Produkte erzielen, jedoch nur für den 2. Produktartikel.

Was meine ich? Wenn der Kunde "Jacke" kauft, wird kein Rabatt gewährt.

Der Kunde kauft zwei der "Jacket" -Produkte. 20% Rabatt auf die zweite "Jacke".

Der Kunde kauft fünf der "Jacket" -Produkte. Immer noch nur 20% Rabatt auf die 2. "Jacke".

Es sollte für alle einfachen und variablen Produkte funktionieren.

Ich habe es geschafft, so viel herauszufinden, und ich bitte um Hilfe, wie der Rabatt nur für den 2. Artikel gelten kann.

Hier ist der Code:

add_filter('woocommerce_product_get_price', 'fifty_percent_on_second_product', 90, 2 );
add_filter('woocommerce_product_get_regular_price', 'fifty_percent_on_second_product', 90, 2 );
function fifty_percent_on_second_product( $price, $product ) {
    if ( is_user_logged_in() ) { 

        I do not know what to do here

}   
    return $price;   
}

Weiß jemand, wie man diese Arbeit macht? Wenn ja, bitte helfen Sie mir.

1
user10913018 19 Jän. 2019 im 14:11

3 Antworten

Beste Antwort

Sie können die Gebühren-API verwenden, um einen Rabatt (20%) auf den 2. Artikel nur auf diese Weise zu erhalten:

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 );
}

Der Code wird in die Datei function.php Ihres aktiven untergeordneten Themas (oder aktiven Themas) eingefügt. Getestet und funktioniert.

2
LoicTheAztec 19 Jän. 2019 im 13:34
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
Risha Tiwari 19 Jän. 2019 im 11:48
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
Risha Tiwari 19 Jän. 2019 im 12:48