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

Я пытаюсь создать очень конкретный тип кода купона.

  • Если покупатель вводит «allthings30», он получает скидку 30%.

  • Однако, если заказ превышает 75 фунтов стерлингов, они также получают бесплатную доставку.

Теперь на веб-сайте уже есть бесплатная доставка, но я хочу, чтобы она была отключена, если сумма заказа ниже 75 фунтов стерлингов, только когда применяется этот код.

Используя другие вопросы о stackoverflow, мне удалось создать код, но он применяется к каждой отдельной паре.

Как применить этот код только к купону allthings30? Любая помощь очень приветствуется.

add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 33, 38 );
function coupons_removes_free_shipping( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    $min_subtotal      = 75; // Minimal subtotal allowing free shipping
    $coupon_code    = 'allthings30'; // The required coupon code

    // Get needed cart subtotals
    $subtotal_excl_tax = WC()->cart->get_subtotal();
    $subtotal_incl_tax = $subtotal_excl_tax + WC()->cart->get_subtotal_tax();
    $discount_excl_tax = WC()->cart->get_discount_total();
    $discount_incl_tax = $discount_total + WC()->cart->get_discount_tax();

    // Calculating the discounted subtotal including taxes
    $discounted_subtotal_incl_taxes = $subtotal_incl_tax - $discount_incl_tax;

    $applied_coupons = in_array( strtolower($coupon_code), WC()->cart->get_applied_coupons() );

    if( sizeof($applied_coupons) > 0 && $discounted_subtotal_incl_taxes < $min_subtotal ){
        foreach ( $rates as $rate_key => $rate ){
            // Targeting "Free shipping"
            if( 'free_shipping' === $rate->method_id  ){
                unset($rates[$rate_key]);
            }
        }
    }
    return $rates;
}

person Nikhil Puthu    schedule 05.05.2020    source источник
comment
Взгляните на это, это, безусловно, может помочь вам в дальнейшей настройке кода stackoverflow.com/questions/57963173/ & https://stackoverflow.com/questions/56094263/allow-specific-products-to-be-Purchase-only-if-a-coupon-is-application-in-woocommerc   -  person 7uc1f3r    schedule 05.05.2020
comment
Привет, спасибо за ответ. Я новичок в php. Приведенный выше код взят из этого сообщения stackoverflow.com/questions/52912181/. Я попытался внести некоторые изменения, используя проверенные вами ссылки. Но это не работает   -  person Nikhil Puthu    schedule 05.05.2020
comment
При необходимости скорректируйте свой вопрос, четко показывая, что вы пробовали до сих пор и на чем застряли. Как задать хороший вопрос?   -  person 7uc1f3r    schedule 05.05.2020


Ответы (1)


Вы очень близко ... Следующее выполнит работу:

add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 33, 38 );
function coupons_removes_free_shipping( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    $min_subtotal   = 75; // Minimal subtotal allowing free shipping
    $coupon_code    = 'summer'; // The required coupon code

    // Get cart subtotals and applied coupons
    $cart              = WC()->cart;
    $subtotal_excl_tax = $cart->get_subtotal();
    $subtotal_incl_tax = $subtotal_excl_tax + $cart->get_subtotal_tax();
    $discount_excl_tax = $cart->get_discount_total();
    $discount_incl_tax = $discount_excl_tax + $cart->get_discount_tax();
    $applied_coupons   = $cart->get_applied_coupons(); // Get applied coupons array

    // Calculating the discounted subtotal including taxes
    $disc_subtotal_incl_tax = $subtotal_incl_tax - $discount_incl_tax;

    if( in_array( strtolower($coupon_code), $applied_coupons ) && $disc_subtotal_incl_tax < $min_subtotal ){
        foreach ( $rates as $rate_key => $rate ){
            // Targeting "Free shipping"
            if( 'free_shipping' === $rate->method_id  ){
                unset($rates[$rate_key]);
            }
        }
    }
    return $rates;
}

Не забудьте после сохранения этого кода в файле functions.php вашей темы обновить тарифы на доставку в настройках тарифов администратора, отключив и сохранив любой способ доставки, а затем снова включив и сохраните его ...

person LoicTheAztec    schedule 05.05.2020
comment
Большое спасибо за большую помощь - person Nikhil Puthu; 05.05.2020