Добавьте купон на скидку для товаров без скидки по купону

У меня есть корзина Woocommerce, и я успешно добавил скидку "в комплекте", которая позволяет получить скидку в размере 7 долларов США на каждый товар в корзине, если количество корзин составляет 5 или более.

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

Вот как я сейчас добавляю скидку на пакет:

add_action( 'woocommerce_cart_calculate_fees','wc_cart_quantity_discount', 10, 1 );
function wc_cart_quantity_discount( $cart_object ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

$discount = 0;
$cart_item_count = $cart_object->get_cart_contents_count();

if( $cart_item_count > 4 )
    $percent = 25;


$discount -= $cart_object->get_cart_contents_count() * 7;

if( $percent > 0 )
    $cart_object->add_fee( __( "Bundle discount", "woocommerce" ), $discount, true);
}   

Например:
У меня в корзине 5 товаров, и 1 из них уже уценен купоном со скидкой 35%.
Можно ли сохранить скидку на пакет только для 4 товаров без скидки по купону?

Я не хочу складывать 7 долларов плюс 35%. Я хочу, чтобы купон имел преимущественную силу, если он был применен без потери скидки на остальные мои 4 товара.

1 ответ

Решение

Вот подключенный код функции, который добавит скидку на каждую недисконтированную корзину. $7 если в корзине минимум 5 товаров:

add_action( 'woocommerce_cart_calculate_fees','wc_cart_quantity_discount', 10, 1 );
function wc_cart_quantity_discount( $cart_object ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $cart_total_count = $cart_object->get_cart_contents_count();
    $cart_items_count = 0;

    // Counting non discounted cart items (by a coupon discount)
    foreach( $cart_object->get_cart() as $cart_item_key => $cart_item )
        if( $cart_item['line_subtotal'] == $cart_item['line_total'] )
            $cart_items_count += $cart_item['quantity']; 

    if( $cart_total_count > 4 ){
        $discount = $cart_items_count * 7;
        $cart_object->add_fee( __( "Bundle discount", "woocommerce" ), -$discount, true);
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Этот код протестирован и работает.

Другие вопросы по тегам