Установите для конкретной налогооблагаемой стоимости доставки значение 0 на основе промежуточного итога корзины в WooCommerce.

С помощью следующего кода я могу для конкретного метода стоимости доставки (здесь 'easypack_parcel_machines') установить стоимость 0, когда промежуточная сумма корзины достигает определенной суммы (здесь 150 злотых) < / em>:

function override_inpost_cost( $rates, $package ) {
    // Make sure paczkomaty is available
    if ( isset( $rates['easypack_parcel_machines'] ) ) {
        // Current value of the shopping cart
        $cart_subtotal = WC()->cart->subtotal;
        // Check if the subtotal is greater than 150pln
        if ( $cart_subtotal >= 150 )    {
            // Set the cost to 0pln
            $rates['easypack_parcel_machines']->cost = 0;

        }
    }
    
    return $rates;
}

add_filter( 'woocommerce_package_rates', 'override_inpost_cost', 10, 2 );

Но проблема в том, что первоначальная стоимость налога на доставку остается, даже если стоимость метода доставки easypack_parcel_machines установлена ​​равной нулю от ее первоначальной стоимости (поскольку она облагается налогом).

Как изменить код, чтобы, если стоимость метода доставки easypack_parcel_machines установлена ​​на 0, налог также будет равен нулю?


person mwlandof    schedule 19.11.2020    source источник


Ответы (1)


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

Чего не хватает в вашем коде, так это установить нулевые налоги следующим образом:

add_filter( 'woocommerce_package_rates', 'override_inpost_shipping_method_cost', 10, 2 );
function override_inpost_shipping_method_cost( $rates, $package ) {
    $targeted_shipping_rate_id = 'easypack_parcel_machines'; // <== Define shipping method rate Id
    
    // Make sure that our shipping rate is available
    if ( isset( $rates[$targeted_shipping_rate_id] ) ) {
        $cart_subtotal_incl_tax = 0; // Initializing

        // Get cart items subtotal for the current shipping package
        foreach( $package['contents'] as $cart_item ) {
            $cart_subtotal_incl_tax += $cart_item['line_subtotal'] + $cart_item['line_subtotal_tax'];
        }
        
        // Check if the subtotal is greater than 150pln
        if ( $cart_subtotal_incl_tax >= 150 )    {
            // Set the cost to 0pln
            $rates[$targeted_shipping_rate_id]->cost = 0;

            $taxes = array(); // Initializing

            // Loop through the shipping method rate taxes array
            foreach( $rates[$targeted_shipping_rate_id]->taxes as $key => $tax_cost ) {
                $taxes[$key] = 0; // Set each tax to Zero
            }

            if ( ! empty($taxes) ) {
                $rates[$targeted_shipping_rate_id]->taxes = $taxes; // Set back "zero" taxes array
            }
        }
    }

    return $rates;
}

Код находится в файле functions.php активной дочерней темы (или активной темы). Должно сработать.

Примечание. Не забудьте очистить корзину, чтобы обновить кешированные данные о доставке.

person LoicTheAztec    schedule 19.11.2020
comment
Большое спасибо!!!!! Работает как положено !!!!! :) - person mwlandof; 20.11.2020