Updated
You may have to "Enable debug mode" in general shipping settings under "Shipping options" tab, to disable temporarily shipping caches.
The following code will change the shipping method cost on custom calculations for a specific country (here Japan):
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;
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
Don't forget to enable back shipping cache.