Сделайте индивидуально рассчитанную стоимость доставки для конкретной страны в Woocommerce - PullRequest
0 голосов
/ 11 октября 2018

Я ищу решение, которое позволило бы мне изменить стоимость каждой зоны доставки, потому что мне нужно иметь округленное значение также в моей второй валюте (от евро до иены для Японии).Я использовал WC_Geolocation :: geolocate_ip () для динамического изменения валюты на основе IP-адреса, но не могу найти решение для изменения стоимости зон доставки.Пример для объяснения:

    $location = WC_Geolocation::geolocate_ip();
    $country = $location['country'];
    if($country === "JP"){
    //do some code to change every shipping zone cost with a custom value
    //(different for every shipping zone)
    } 

Надеюсь, я был ясен в своем объяснении.

1 Ответ

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

Обновлено

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

Следующий код изменит стоимость метода доставки при пользовательских расчетах для конкретной страны (здесь Япония) :

add_filter( 'woocommerce_package_rates', 'custom_shipping_rates_based_on_country', 20, 2 );
function custom_shipping_rates_based_on_country( $rates, $package ) {

    // ONLY for Japan
    if( $package['destination']['country'] !== 'JP' )
        return $rates;

    // Loop through shipping methods rates
    foreach( $rates as $rate_key => $rate ){

        // Excluding free shipping method
        if( $rate->method_id !== 'free_shipping') {

            // Get initial shipping rate cost
            $initial_cost = $rate->cost;

            ## ---- START ------------------------------------------- ##

            // Add your calculations and settings

            // Rounding decimal setting
            $rounding_decimals = 2;

            // Conversion rate
            $conversion_rate = 1.25;

            // New calculated cost
            $new_cost = $initial_cost * $conversion_rate;

            ## ----  END  ------------------------------------------- ##

            // Set the rate cost (rounded with 2 decimals)
            $rates[$rate_key]->cost = round( $new_cost, $rounding_decimals );

            // Taxes rate cost (if enabled)
            foreach ($rate->taxes as $key => $tax){
                if( $rate->taxes[$key] > 0 ){

                    // Calculating the tax rate unit
                    $tax_rate = $rate->taxes[$key] / $initial_cost;

                    // Calculating the new tax cost
                    $new_tax_cost = $tax_rate * $new_cost;

                    // set the new tax cost
                    $taxes[$key] = round( $new_tax_cost, $rounding_decimals );

                    $has_taxes = true;
                } else {
                    $has_taxes = false;
                }
            }
            if( $has_taxes )
                $rates[$rate_key]->taxes = $taxes;

        }
    }

    return $rates;
}

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

Не забудьте включить кэш обратной доставки.

...