Условная прогрессивная процентная скидка на основе количества товаров в корзине в Woocommerce

Я хочу получить условную прогрессивную скидку в зависимости от количества товаров в корзине. После того, как вы добавили в корзину 2 товара, вы получаете скидку. Вы добавляете больше товаров и получаете больше скидок.

Например:

  • 1 товар - полная цена (без скидки)
  • 2 товара - полная цена со скидкой 5% от комбинированной цены
  • 3 товара - полная цена со скидкой 10% от комбинированной цены
  • 4 товара - полная цена со скидкой 15% от комбинированной цены
  • И так далее…

Я безуспешно выполняю поиск в Интернете. При поиске скидок я просто падаю на функцию купона WooCommerce или получаю какой-то старый неправильный код ...

Любая идея? Как я могу это сделать?

Является ли это возможным?

Спасибо.


person Kasper    schedule 05.09.2016    source источник
comment
Похоже на динамическое ценообразование   -  person helgatheviking    schedule 05.09.2016


Ответы (1)


Обновление - октябрь 2018 г. (улучшен код)

Да, для этого можно использовать трюк. Обычно для скидок на корзину мы используем купоны WooCommerce. Купоны здесь не присваиваются. Я буду использовать здесь условную отрицательную комиссию, которая становится скидкой.

Расчет:
- Количество элементов основано на количестве по каждому элементу и общему количеству элементов в корзине
- Процент составляет 0,05 (5%), и он увеличивается с каждым дополнительным элементом (как вы просили)
- Мы используем промежуточный итог со скидкой (чтобы избежать добавления нескольких сворачивающихся скидок по купонам)

Код:

add_action( 'woocommerce_cart_calculate_fees', 'cart_progressive_discount', 50, 1 );
function cart_progressive_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // For 1 item (quantity 1) we EXIT;
    if( $cart->get_cart_contents_count() == 1 )
        return;

    ## ------ Settings below ------- ##

    $percent = 5; // Percent rate: Progressive discount by steps of 5%
    $max_percentage = 50; // 50% (so for 10 items as 5 x 10 = 50)
    $discount_text = __( 'Quantity discount', 'woocommerce' ); // Discount Text

    ## ----- ----- ----- ----- ----- ##

    $cart_items_count = $cart->get_cart_contents_count();
    $cart_lines_total = $cart->get_subtotal() - $cart->get_discount_total();

    // Dynamic percentage calculation
    $percentage = $percent * ($cart_items_count - 1);

    // Progressive discount from 5% to 45% (Between 2 and 10 items)
    if( $percentage < $max_percentage ) {
        $discount_text .=  ' (' . $percentage . '%)';
        $discount = $cart_lines_total * $percentage / 100;
        $cart->add_fee( $discount_text, -$discount );
    }
    // Fixed discount at 50% (11 items and more)
    else {
        $discount_text .=  ' (' . $max_percentage . '%)';
        $discount = $cart_lines_total * $max_percentage / 100;
        $cart->add_fee( $discount_text, -$discount );
    }
}

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

При использовании FEE API для скидок (отрицательная комиссия) всегда применяются налоги.


Ссылки:

person LoicTheAztec    schedule 05.09.2016
comment
Спасибо, работает отлично! :-) Ты спас мне день. - person Kasper; 05.09.2016
comment
это работает, но woocommerce препятствует отрицательной комиссии. Какое-то время они их блокировали, но слишком много людей пожаловались и вернули назад: github.com/woocommerce/woocommerce/issues/13224 - person Lane; 30.08.2017
comment
@Lane Я все равно знаю, спасибо ... Пока все работает нормально, и будет работать дальше, так как команда разработчиков WC добавит новый метод / класс / функциональность для скидок (без купонов). - person LoicTheAztec; 30.08.2017