Have you ever faced a situation where you needed to change currency in WPML based on geolocation? If so then you must have looked into WPML settings only to find out that WPML doesn’t have any such built-in feature.
Following is a piece of code which will change currency in WPML based on geolocation. This piece of code works with WooCommerce as well.
// Set currency based on user's country if ( ! is_admin() ) { // This helps to avoid 500 error in WPML admin page add_filter('wcml_client_currency', 'geo_client_currency'); function geo_client_currency($client_currency) { $country = WC()->customer->get_shipping_country(); switch ($country) { // EU case "AT": return "EUR"; break; case "BE": return "EUR"; break; case "CY": return "EUR"; break; case "EE": return "EUR"; break; case "FI": return "EUR"; break; case "FR": return "EUR"; break; case "DE": return "EUR"; break; case "EL": return "EUR"; break; case "IT": return "EUR"; break; case "LT": return "EUR"; break; case "LV": return "EUR"; break; case "LU": return "EUR"; break; case "MT": return "EUR"; break; case "NL": return "EUR"; break; case "PT": return "EUR"; break; case "SP": return "EUR"; break; case "SI": return "EUR"; break; case "SK": return "EUR"; break; // Others case "CH": return "CHF"; break; case "GB": return "GBP"; break; case "DK": return "DKK"; break; case "CZ": return "CZK"; break; case "PL": return "PLN"; break; case "CA": return "CAD"; break; default: return "USD"; break; } } }
Note: If you use this piece of code with WooCommerce and you have visual currency switcher on the front end then the currency switcher will not work because this code will always change currency in WPML based on geolocation. In order to this code along with visual currency switcher on front-end, you will have to modify it further.