Скидка за количество на 2-й товар только в Woocommerce - PullRequest
0 голосов
/ 19 января 2019

Я хочу получить глобальную скидку на все товары, но только на 2-ую товарную позицию.

Что я имею в виду? Если клиент покупает «Куртку», скидка не предоставляется.

Клиент покупает два продукта "Куртка". Скидка 20% предоставляется на второй «Жакет».

Клиент покупает пять товаров "Куртка". Еще только скидка 20% на 2-ую "Куртку".

Должно работать для всех простых и переменных продуктов.

Мне удалось это выяснить, и я прошу помощи, как сделать скидку применимой только ко 2-му пункту.

Вот код:

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

Кто-нибудь знает, как заставить это работать? Если да, пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 19 января 2019
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 голосов
/ 19 января 2019

Вы можете использовать API Fee для получения скидки (20%) на 2-й товар только таким образом:

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

Код находится в файле function.php вашей активной дочерней темы (или активной темы)).Проверено и работает.

0 голосов
/ 19 января 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...