Прикладные купоны отключают Бесплатная доставка условно в Woocommerce - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь сделать так, чтобы, если бы клиент добавил код купона (Любой из них), опция Бесплатная доставка исчезла бы, и была бы применена фиксированная ставка.- Вы могли бы подумать, что это будет легко реализовать, было бы сотни плагинов и способов, описанных для этого, но я не нашел ни одного.Я не хочу платить 89 долларов за плагин, который выполняет эту единственную вещь

Дополнительный бонус будет, если они используют купон, но тратят более $ 249, они все еще могут претендовать на бесплатную доставку.Я читал кое-где, как это сделать, но он требует, чтобы я получил POST ID, который с последней версией WooCommerce невозможен, как это было раньше, я не знаю идентификатор доставки, поэтому я потерян Вот код

add_filter( 'woocommerce_shipping_packages', function( $packages ) {
$applied_coupons = WC()->session->get( 'applied_coupons', array() );
if ( ! empty( $applied_coupons ) ) {
$free_shipping_id = 'free_shipping:2';
unset($packages[0]['rates'][ $free_shipping_id ]);
}
return $packages;
} );

Спасибо

Отредактировано

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

$min_total      = 250; // Minimal subtotal allowing free shipping

// Get needed cart totals
$total_excl_tax = WC()->cart->get_total();
$discount_excl_tax = WC()->cart->get_discount_total();


// Calculating the discounted subtotal including taxes
$discounted_subtotal_incl_taxes = $total_excl_tax - $discount_excl_tax;

$applied_coupons   = WC()->cart->get_applied_coupons();

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

}

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Приведенный ниже код активирует «Бесплатную доставку» для примененных купонов, только если промежуточная сумма корзины достигает минимальной суммы (со скидкой, включая налоги) :

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

    $min_subtotal      = 250; // Minimal subtotal allowing free shipping

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

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


Оригинальный ответ:

Приведенный ниже код удалит способы доставки "Бесплатная доставка", когда любой купон будет применен без каких-либо настроек.В вашем реальном коде есть ошибки.Попробуйте следующее:

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

    $applied_coupons = WC()->cart->get_applied_coupons();

    if( sizeof($applied_coupons) > 0 ){
        // Loop through shipping rates
        foreach ( $rates as $rate_key => $rate ){
            // Targeting "Free shipping" only
            if( 'free_shipping' === $rate->method_id  ){
                unset($rates[$rate_key]); // Removing current method
            }
        }
    }
    return $rates;
}

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

0 голосов
/ 21 октября 2018

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

add_filter( 'woocommerce_shipping_packages', function( $packages ) {
$applied_coupons = WC()->session->get( 'applied_coupons', array() );
if ( ! empty( $applied_coupons ) ) {
$free_shipping_id = 'free_shipping:2';
unset($packages[0]['rates'][ $free_shipping_id ]);
}
return $packages;
} );

Просто измените $ free_shipping_id в приведенном выше коде на идентификаторвашего варианта бесплатной доставки.Вы можете найти свой идентификатор, зайдя в WooCommerce> Настройки> Параметры доставки, а затем нажмите на свой вариант Бесплатная доставка.Идентификатор сообщения будет указан в URL-адресе страницы, на которой отображаются сведения / параметры бесплатной доставки.

i.e www.yourdomain.com/wp-admin/post.php?post=40107&action=edit

Где 40107 - идентификатор доставки в этом примере.Ваш идентификатор доставки будет другим.

...