What is Currency Switcher for WooCommerce?
Currency Switcher lets your international customers browse and purchase in their local currency. It automatically fetches live exchange rates, detects the visitor's country via GeoIP, and can optionally convert the full WooCommerce checkout — cart, order totals, and payment — into the selected currency. Everything runs from a single clean admin panel with zero external dependencies.
Requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| WordPress | 6.3 | 7.0+ |
| WooCommerce | 7.0 | 9.0+ |
| PHP | 7.4 | 8.2+ |
| MySQL | 5.6 | 8.0+ |
| HTTPS | Required for GeoIP API requests | |
Installation
currency-switcher-for-woocommerce.zip file and click Install Now.General Settings
The General tab controls the conversion mode, base currency, and which currencies are available to visitors. This is the primary configuration screen.
Conversion Mode
Full Checkout — the selected currency applies to the cart, order total, and the amount charged by the payment gateway. Your payment gateway must support multiple currencies (Stripe, PayPal, etc.).
Visual Only — prices are displayed in the chosen currency, but WooCommerce charges the base store currency at checkout. Useful when your gateway only supports one currency.
Display Settings
The Display tab controls how the currency switcher looks on the frontend — the label format, rounding, decimals, and a live preview of the actual switcher widget.
Exchange Rates
The Exchange Rates tab selects the rate source, sets the refresh schedule, and shows the last fetch time. A Manual Refresh button lets you force an immediate rate update.
Conversion Modes
Visual Only mode
In this mode, prices are converted and displayed in the visitor's selected currency everywhere on the frontend — product pages, shop archives, cart, and checkout. However, WooCommerce internally processes the order and charges the payment gateway in the base store currency. The converted price is for display only.
Use this mode if your payment gateway does not support multi-currency, or if you only want to give customers a price indication without actually charging in local currency.
Full Checkout mode
In Full Checkout mode, the conversion goes all the way through: cart totals, tax calculations, shipping, and the final charge sent to the payment gateway are all in the selected currency. Orders are stored in WooCommerce with the currency code the customer used.
GeoIP Auto-Detection
When GeoIP is enabled, the plugin sends a GDPR-safe request to ip-api.com (free tier, no account required) to detect the visitor's country. The country code is then matched to a currency using a built-in country→currency map. The result is cached in a WordPress transient keyed to a hashed IP address — the raw IP is never stored.
If GeoIP detects a country that maps to a currency not in your enabled list, the plugin falls back to the base store currency.
Smart Rounding
After converting a price, raw floating-point results (e.g. 24.571...) are rarely attractive to shoppers. The rounding system applies one of four modes to every converted price:
| Mode | Example Input | Output | Best for |
|---|---|---|---|
| None | $24.571 | $24.57 | Exact pricing, B2B |
| Charm (.99) | $24.571 | $24.99 | Retail — psychological pricing |
| Nearest whole | $24.571 | $25.00 | Clean, round-number stores |
| Ceiling | $24.001 | $25.00 | Always rounds up — margin-safe |
Per-Product Price Override
Sometimes the auto-converted rate is not the right price for a specific market. The per-product override lets you set an exact fixed price for each currency directly on the WooCommerce product edit screen.
Go to Product → Product Data → Storzen Currency Prices. Enter a fixed price for each enabled currency. Leave a field empty to fall back to the auto-converted rate. In the free version, overrides are available for up to 3 currencies per product.
Widget & Shortcode
Shortcode
Place the currency switcher anywhere using the shortcode:
| Attribute | Values | Default |
|---|---|---|
| style | dropdown, buttons | dropdown |
| show_flag | true, false | plugin setting |
| class | Any CSS class string | — |
PHP function
WordPress Widget
The plugin registers a Currency Switcher widget in Appearance → Widgets. Drag it into any widget area. Configure the style and flag display from the widget settings panel.
All Settings
All settings are stored in a single WordPress option: storzen_cs_settings (serialised array).
| Key | Type | Default | Description |
|---|---|---|---|
| mode | string | full | Conversion mode: full or visual |
| currencies | array | [] | Enabled currency codes (ISO 4217) |
| base_currency | string | WC setting | Store base currency — mirrors WooCommerce |
| rate_source | string | ecb | Rate provider: ecb, open_exchange_rates, manual |
| api_key | string | "" | OpenExchangeRates App ID (only if source = oxr) |
| refresh_interval | int | 12 | Hours between automatic rate refreshes |
| geoip_enabled | bool | false | Enable GeoIP auto-detection on page load |
| rounding | string | none | Rounding mode: none, charm, nearest, ceiling |
| decimals | int | 2 | Decimal places for converted prices |
| show_flag | bool | true | Show country flag emoji in the switcher |
| switcher_display | string | symbol_code | Label format: symbol, code, symbol_code, name |
| manual_rates | array | {} | Manual rate overrides: {"EUR": 0.92, "GBP": 0.79} |
Hooks & Filters
Filters
| Hook | Arguments | Description |
|---|---|---|
| storzen_cs_converted_price | $price, $currency |
Modify the converted price after rounding. Return the final float. |
| storzen_cs_rate | $rate, $from, $to |
Override the exchange rate for a specific currency pair. |
| storzen_cs_enabled_currencies | $currencies |
Programmatically add or remove currencies from the enabled list. |
| storzen_cs_geoip_currency | $currency, $country_code |
Override the currency selected by GeoIP for a given country. |
Actions
| Hook | Description |
|---|---|
| storzen_cs_rates_refreshed | Fires after exchange rates are successfully fetched and cached. |
| storzen_cs_currency_switched | Fires when a visitor switches their active currency. |
Frequently Asked Questions
Does this work with my payment gateway?
get_woocommerce_currency() — including Stripe, PayPal, Square, and Mollie — will work. Test with a small transaction first. In Visual Only mode, the gateway always receives the base store currency so compatibility is guaranteed.Are exchange rates real-time?
Is this GDPR compliant?
ip-api.com to determine country. The response (country code) is cached in a WordPress transient keyed by a SHA-256 hash of the IP — the raw IP address is never stored in the database. The active currency is stored in a session cookie (storzen_cs_currency) which contains only the ISO currency code, no personal data.Can I set different prices per country rather than using the exchange rate?
Will it slow down my site?
Where does the currency selection get stored?
storzen_cs_currency for the duration of the browser session. When the visitor closes the browser, the selection resets. If GeoIP is enabled, the auto-detected currency is restored on the next visit.Changelog
[storzen_currency_switcher] shortcode.pot file included, all strings wrapped in i18n functions