📖 Documentation

Multi Currency Switcher for
WooCommerce — by Storzen

Lightweight multi-currency switcher with auto exchange rates, GeoIP detection, smart rounding, and full checkout conversion — zero bloat, zero telemetry.

WooCommerce 7.0+ WordPress 6.3–7.0 PHP 7.4+ v1.0.0 PHPCS / WPCS Clean GPL-2.0+
01 — Introduction

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.

🔄
Auto Exchange Rates
Pulls live rates from the European Central Bank (free, no API key) or OpenExchangeRates. Configurable refresh interval from 1–48 hours.
🌍
GeoIP Auto-Detection
Detects the visitor's country via a GDPR-safe IP lookup and automatically selects the matching currency — no cookies, no tracking.
🛒
Full Checkout Mode
Converts cart totals, order amounts, and payment currency — not just display prices. Visitors pay in their actual currency.
🎯
Smart Rounding
Four rounding modes: none, charm pricing (.99), nearest whole, or ceiling. Each mode previews a live example in the admin.
💰
Per-Product Price Override
Set exact fixed prices per currency per product — bypasses auto-conversion for products with region-specific pricing.
Lightweight & Fast
No bloated libraries. Rates cached via WP transients. Assets only enqueued on pages where the switcher is active.
02 — Requirements

Requirements

RequirementMinimumRecommended
WordPress6.37.0+
WooCommerce7.09.0+
PHP7.48.2+
MySQL5.68.0+
HTTPSRequired for GeoIP API requests
The free version uses the European Central Bank rate feed — no API key, no account, and no rate limits. OpenExchangeRates is optional and requires a free account.
03 — Getting Started

Installation

1
Upload the plugin
Go to WordPress Admin → Plugins → Add New → Upload Plugin. Choose the currency-switcher-for-woocommerce.zip file and click Install Now.
2
Activate
Click Activate Plugin. The plugin creates its database table and registers a background cron job to fetch exchange rates on first activation.
3
Open the settings page
Navigate to WooCommerce → Currency Switcher in your admin menu.
WooCommerce → Currency Switcher
4
Enable currencies & save
On the General tab, tick the currencies you want to offer, choose a conversion mode, and click Save Settings. The switcher is live instantly — no cache flush needed.
5
Add the switcher to your theme
Use the WordPress widget, the shortcode, or the PHP function to place the currency picker anywhere on your storefront.
[storzen_currency_switcher]
05 — Admin UI

General Settings

The General tab controls the conversion mode, base currency, and which currencies are available to visitors. This is the primary configuration screen.

yourstore.com/wp-admin/admin.php?page=currency-switcher-for-woocommerce
💱
Currency Switcher
by Storzen
Active v1.0.0
⚙️General
📺Display
🔄Exchange Rates
📋Usage
⚙️
General Settings
🛒
Conversion Mode
Full Checkout Cart & payment converted
Visual Only Display only, WC charges base
🌍
Enabled Currencies
🇺🇸USD
🇪🇺EUR
🇬🇧GBP
🇯🇵JPY
🇧🇩BDT
GeoIP Auto-Detection
Set currency from visitor's country
Show Currency Flag
Display country flag in the switcher

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.

⚠️
In Full Checkout mode, verify your payment gateway supports the currencies you enable. Stripe and PayPal multi-currency are both supported. Some gateways may reject orders placed in unsupported currencies.
06 — Admin UI

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.

…?page=currency-switcher-for-woocommerce&tab=display
💱
Currency Switcher
by Storzen
Activev1.0.0
⚙️General
📺Display
🔄Exchange Rates
📋Usage
📺
Display Settings
🎨
Switcher Style
Style
Label Format
Live Preview
🇺🇸 USD
🇪🇺 EUR
🇬🇧 GBP
🎯
Smart Rounding
$25.43None
$24.99Charm
$25.00Nearest
$26.00Ceiling
07 — Admin UI

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.

…?page=currency-switcher-for-woocommerce&tab=rates
💱
Currency Switcher
by Storzen
Activev1.0.0
⚙️General
📺Display
🔄Exchange Rates
📋Usage
🔄
Exchange Rates
📡
Rate Source
🏦 ECB Free, no key needed
🔑 OXR OpenExchangeRates
✏️ Manual Set rates yourself
Refresh Interval
How often to auto-fetch rates
Last Updated
Last successful fetch
3 hours ago
Manual Refresh
08 — Features

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.

ℹ️
Payment gateway compatibility: Stripe, PayPal, and most modern gateways support multi-currency natively. Always test a transaction in a staging environment before going live.
09 — Features

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.

💡
The GeoIP API is called only once per visitor session. Subsequent page views use the cached result. The transient expires after 6 hours.
10 — Features

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:

ModeExample InputOutputBest for
None$24.571$24.57Exact pricing, B2B
Charm (.99)$24.571$24.99Retail — psychological pricing
Nearest whole$24.571$25.00Clean, round-number stores
Ceiling$24.001$25.00Always rounds up — margin-safe
11 — Features

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.

ℹ️
Fixed prices are stored as product meta and bypass the rate conversion entirely. They are not affected by rate refreshes or rounding settings.
12 — Features

Widget & Shortcode

Shortcode

Place the currency switcher anywhere using the shortcode:

[storzen_currency_switcher] [storzen_currency_switcher style="buttons"] [storzen_currency_switcher style="dropdown" show_flag="false"]
AttributeValuesDefault
styledropdown, buttonsdropdown
show_flagtrue, falseplugin setting
classAny CSS class string

PHP function

// In your theme template: <?php if ( function_exists( 'storzen_cs_render' ) ) { storzen_cs_render( array( 'style' => 'buttons' ) ); } ?>

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.

13 — Reference

All Settings

All settings are stored in a single WordPress option: storzen_cs_settings (serialised array).

KeyTypeDefaultDescription
modestringfullConversion mode: full or visual
currenciesarray[]Enabled currency codes (ISO 4217)
base_currencystringWC settingStore base currency — mirrors WooCommerce
rate_sourcestringecbRate provider: ecb, open_exchange_rates, manual
api_keystring""OpenExchangeRates App ID (only if source = oxr)
refresh_intervalint12Hours between automatic rate refreshes
geoip_enabledboolfalseEnable GeoIP auto-detection on page load
roundingstringnoneRounding mode: none, charm, nearest, ceiling
decimalsint2Decimal places for converted prices
show_flagbooltrueShow country flag emoji in the switcher
switcher_displaystringsymbol_codeLabel format: symbol, code, symbol_code, name
manual_ratesarray{}Manual rate overrides: {"EUR": 0.92, "GBP": 0.79}
14 — Reference

Hooks & Filters

Filters

HookArgumentsDescription
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

HookDescription
storzen_cs_rates_refreshedFires after exchange rates are successfully fetched and cached.
storzen_cs_currency_switchedFires when a visitor switches their active currency.
15 — FAQ

Frequently Asked Questions

Does this work with my payment gateway?
In Full Checkout mode the plugin passes the selected currency to WooCommerce, which then passes it to the gateway. Any gateway that reads 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?
Rates are fetched from your chosen source (ECB or OpenExchangeRates) on a schedule you set — between 1 and 48 hours. The ECB publishes its reference rates once daily (around 16:00 CET on business days). For most retail stores, a 12–24 hour refresh interval is sufficient. You can always trigger an immediate update using the Manual Refresh button on the Exchange Rates tab.
Is this GDPR compliant?
Yes. The GeoIP lookup sends only the visitor's IP to 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?
Yes — use the Per-Product Price Override feature on each product's edit screen. Set a fixed price in each currency and the plugin uses that instead of the auto-converted rate. In the free version this is available for up to 3 currencies per product.
Will it slow down my site?
No. Exchange rates are cached in WordPress transients. GeoIP results are cached per visitor. The frontend script is small (~6 KB minified) and only loaded on pages that contain a currency switcher. The price conversion happens in PHP on the server — no additional AJAX calls are made when a visitor switches currency, as prices are converted server-side on the next page load.
Where does the currency selection get stored?
The selected currency is stored in a first-party session cookie named 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.
16 — Changelog

Changelog

v1.0.0
June 2026
Initial Release
Initial release — Currency Switcher for WooCommerce by Storzen
ECB and OpenExchangeRates rate providers with configurable refresh interval
Full Checkout and Visual Only conversion modes
GeoIP auto-detection via ip-api.com with hashed transient caching
Smart Rounding — none, charm (.99), nearest, ceiling
Per-product price override (up to 3 currencies in free version)
Sidebar widget and [storzen_currency_switcher] shortcode
PHPCS / WPCS clean — 0 errors, 0 warnings under WordPress Coding Standard
Translation ready.pot file included, all strings wrapped in i18n functions