Применить скидку 100% на самый дешевый товар в WooCommerce - PullRequest
2 голосов
/ 28 апреля 2020

Я создал купон ' BOGOF ' (купи один, получи один бесплатно), используя обычный купонный метод woocommerce.

Купон дает пользователю 100% процентную скидку на 1 другой товар в корзине.


Настройки купона

Общая информация:

  • Тип скидки: Процентная скидка Купон

  • сумма: 100

Пределы использования:

  • Ограничить использование X предметов: 1

При использовании:

  • Купон применяет 100% к случайному элементу в корзине (поведение по умолчанию, I угадайте)

Желаемый:

  • Требуется 100% скидка на самый дешевый товар в корзине.

С помощью следующего кода я пытаюсь достичь своей цели, к сожалению, без желаемого результата

function filter_woocommerce_coupon_get_discount_amount( $discount, $discounting_amount, $cart_item, $single, $instance ) { 
    $price_array = array();

    foreach( $cart_item as $item ) {
        echo $item->price;
        if($item->price > 0){
            array_push($price_array, $item->price);
        }
    }

    $lowestPrice = min($price_array);

    if( $lowestPrice < $discount ){
        $discount = $lowestPrice; 
    }

    return $discount; 
}    
add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );

1 Ответ

2 голосов
/ 28 апреля 2020

Во-первых, в вашем коде есть большая ошибка, поскольку $cart_item Аргумент переменной hook является текущим элементом корзины, но не массивом элементов корзины ...

Следующее действие будет применять скидку купона 100% на самая дешевая корзина (закомментированный код):

add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_wc_coupon_get_discount_amount', 10, 5 );
function filter_wc_coupon_get_discount_amount( $discount_amount, $discounting_amount, $cart_item, $single, $coupon ) { 
    // Define below your existing coupon code
    $coupon_code = 'BOGOF';

    // Only for a defined coupon code
    if( strtolower( $coupon_code ) !== $coupon->get_code() ) 
        return $discount_amount;

    $items_prices = [];
    $items_count  = 0;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $key => $item ){
        // Get the cart item price (the product price)
        if ( wc_prices_include_tax() ) {
            $price = wc_get_price_including_tax( $item['data'] );
        } else {
            $price = wc_get_price_excluding_tax( $item['data'] );
        }

        if ( $price > 0 ){
            $items_prices[$key] = $price;
            $items_count       += $item['quantity'];
        }
    }

    // Only when there is more than one item in cart
    if ( $items_count > 1 ) {
        asort($items_prices);  // Sorting prices from lowest to highest

        $item_keys = array_keys($items_prices);
        $item_key  = reset($item_keys); // Get current cart item key

        // Targeting only the current cart item that has the lowest price
        if ( $cart_item['key'] == $item_key ) {
            return reset($items_prices); // return the lowest item price as a discount
        }
    } else {
        return 0;
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...