{"id":322190,"date":"2026-06-08T02:14:43","date_gmt":"2026-06-08T02:14:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/storzen-multi-currency-switcher-for-woocommerce\/"},"modified":"2026-10-21T09:52:46","modified_gmt":"2026-10-21T09:52:46","slug":"storzen-multi-currency-switcher-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/storzen-multi-currency-switcher-for-woocommerce\/","author":15779958,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.5","stable_tag":"1.1.5","tested":"7.1.4","requires":"6.3","requires_php":"8.0","requires_plugins":null,"header_name":"Currency Switcher for WooCommerce \u2013 Multi Currency, Auto Rates & GeoIP","header_author":"WebTend","header_description":"Lightweight multi-currency switcher for WooCommerce. Auto exchange rates, GeoIP detection, visual-only or full checkout mode, per-product pricing, and smart rounding \u2014 zero bloat, zero telemetry.","assets_banners_color":"9192a0","last_updated":"2026-10-21 09:52:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/webtend.net\/currency-switcher-for-woocommerce","header_author_uri":"https:\/\/webtend.net\/","rating":0,"author_block_rating":0,"active_installs":60,"downloads":1083,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.1.3":{"tag":"1.1.3","author":"devhasib","date":"2026-10-21 09:31:34","revision":3758031},"1.1.4":{"tag":"1.1.4","author":"devhasib","date":"2026-09-30 11:02:17","revision":3721041},"1.1.5":{"tag":"1.1.5","author":"devhasib","date":"2026-10-21 09:52:46","revision":3758057}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3564051,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3564042,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3564042,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"storzen-cs\/currency-switcher":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"storzen-cs\/currency-switcher","version":"1.1.2","title":"Currency Switcher","category":"widgets","icon":"money-alt","description":"Display a multi-currency switcher for your WooCommerce store.","keywords":["currency","switcher","woocommerce","money","storzen"],"textdomain":"storzen-multi-currency-switcher-for-woocommerce","supports":{"html":false,"align":["left","center","right","wide","full"],"color":{"text":true,"background":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true,"lineHeight":true}},"attributes":{"style":{"type":"string","default":"","enum":["","dropdown","buttons","select"]},"showFlag":{"type":"string","default":"","enum":["","true","false"]},"className":{"type":"string","default":""}},"example":{"attributes":{"style":"dropdown","showFlag":"true"}},"editorScript":"file:.\/index.js","style":"file:.\/style.css"}},"tagged_versions":["1.1.3","1.1.4","1.1.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3564042,"resolution":"1","location":"assets","locale":"","width":1673,"height":835},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3564042,"resolution":"2","location":"assets","locale":"","width":1690,"height":834},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3564042,"resolution":"3","location":"assets","locale":"","width":1684,"height":828},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3564042,"resolution":"4","location":"assets","locale":"","width":1700,"height":828}},"screenshots":{"1":"Admin \u2014 General tab with mode selector, GeoIP toggle, and searchable currency grid","2":"Admin \u2014 Display tab with live switcher style preview","3":"Admin \u2014 Price Formats tab with live format preview per currency","4":"Admin \u2014 Payment Gateways tab with per-currency gateway checkboxes","5":"Admin \u2014 Language Map tab for WPML \/ Polylang auto-mapping","6":"Admin \u2014 Exchange Rates tab with rate source cards and manual refresh","7":"Coupon edit screen \u2014 Currency restriction checkboxes"}},"plugin_section":[],"plugin_tags":[12584,21294,16558,24514,286],"plugin_category":[45],"plugin_contributors":[259418,279548],"plugin_business_model":[],"class_list":["post-322190","plugin","type-plugin","status-publish","hentry","plugin_tags-currency-converter","plugin_tags-currency-switcher","plugin_tags-exchange-rate","plugin_tags-multi-currency","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-devhasib","plugin_contributors-webtendhq","plugin_committers-devhasib"],"banners":{"banner":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/banner-772x250.png?rev=3564042","banner_2x":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/banner-1544x500.png?rev=3564042","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/icon-256x256.png?rev=3564051","icon_2x":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/icon-256x256.png?rev=3564051","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/screenshot-1.png?rev=3564042","caption":"Admin \u2014 General tab with mode selector, GeoIP toggle, and searchable currency grid"},{"src":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/screenshot-2.png?rev=3564042","caption":"Admin \u2014 Display tab with live switcher style preview"},{"src":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/screenshot-3.png?rev=3564042","caption":"Admin \u2014 Price Formats tab with live format preview per currency"},{"src":"https:\/\/ps.w.org\/storzen-multi-currency-switcher-for-woocommerce\/assets\/screenshot-4.png?rev=3564042","caption":"Admin \u2014 Payment Gateways tab with per-currency gateway checkboxes"}],"raw_content":"<!--section=description-->\n<p><strong>Currency Switcher for WooCommerce<\/strong> lets your store display and process prices in multiple currencies \u2014 fast, clean, and conversion-focused. Built for modern WordPress stores without the bloat.<\/p>\n\n<p>Sell globally with confidence. Visitors see prices in their local currency automatically, switch currencies with a single click, and checkout in the currency they trust.<\/p>\n\n<p>\ud83d\udcd6 <strong><a href=\"https:\/\/webtend.net\/docs\/multicurrency-switcher-doc.html\">Full Documentation<\/a><\/strong><\/p>\n\n\n\n<h4>\ud83c\udf0d Why Currency Switcher for WooCommerce?<\/h4>\n\n<p>Most multi-currency plugins are bloated, ship with telemetry SDKs, or lock core features behind a paywall. This plugin is different:<\/p>\n\n<ul>\n<li><strong>Lightweight<\/strong> \u2014 no unnecessary code, no jQuery dependency for the switcher UI<\/li>\n<li><strong>Zero telemetry<\/strong> \u2014 no data ever sent to our servers, no Appsero, no analytics SDKs<\/li>\n<li><strong>Fully functional<\/strong> \u2014 every feature works out of the box, nothing locked behind a paywall<\/li>\n<li><strong>Modern<\/strong> \u2014 built for WooCommerce HPOS, block Cart\/Checkout, and FSE block themes<\/li>\n<\/ul>\n\n\n\n<h4>\u2705 Core Features<\/h4>\n\n<p><strong>Multi-Currency Support<\/strong>\nDisplay and process orders in 150+ ISO 4217 currencies. Enable as many currencies as your store needs from a searchable admin grid with flag emojis.<\/p>\n\n<p><strong>Auto Exchange Rates<\/strong>\nRates fetched automatically from the European Central Bank (free, no API key) or Open Exchange Rates. Cached in transients and a resilient database table \u2014 rates are always available even if the API is temporarily down. A dismissible admin notice alerts you when rates are more than 48 hours old, with a one-click refresh button.<\/p>\n\n<p><strong>GeoIP Auto-Detection<\/strong>\nOn a visitor's first page load, the plugin detects their country and automatically sets their local currency. The result is stored in a 30-day cookie \u2014 zero repeat API calls, zero performance impact.<\/p>\n\n<p><strong>Two Switcher Modes<\/strong>\n- <strong>Full Mode<\/strong> \u2014 prices, cart, shipping, and checkout all process in the selected currency. Orders are saved with the customer's currency.\n- <strong>Visual Mode<\/strong> \u2014 display prices in any currency on the storefront but charge in your store's base currency at checkout. Ideal for stores that cannot process multi-currency payments.<\/p>\n\n<p><strong>AJAX No-Reload Currency Switch<\/strong>\nSwitching currency on shop, archive, and single product pages instantly updates all prices in the DOM without a page reload. Cart and checkout pages reload for accurate server-side WooCommerce totals. A <code>storzenCSCurrencyChanged<\/code> JS event fires after every successful DOM update so themes and plugins can hook in.<\/p>\n\n<p><strong>Per-Currency Price Format<\/strong>\nSet decimal separator, thousand separator, symbol position (left \/ right \/ left with space \/ right with space), and decimal places independently for each enabled currency. A live preview updates instantly in the admin as you configure each currency.<\/p>\n\n<p><strong>Currency \u2192 Payment Gateway Mapping<\/strong>\nRestrict which payment gateways appear at checkout based on the active currency. Show only bKash and Nagad for BDT, only Stripe and PayPal for USD. If no mapping is set for a currency, all gateways are shown \u2014 zero breaking change for existing stores.<\/p>\n\n<p><strong>Currency-Specific Coupons<\/strong>\nRestrict any WooCommerce coupon to one or more currencies. A \"Currency restriction\" field appears on the coupon edit screen. Customers applying a coupon in a disallowed currency see a clear error message. Coupons with no restriction set apply to all currencies (safe default).<\/p>\n\n<p><strong>WPML \/ Polylang Language \u2192 Currency Auto-Map<\/strong>\nAutomatically switch currency when a visitor changes language. Map each language to a currency from the \"Language Map\" admin tab. Compatible with WPML and Polylang \u2014 works immediately when either plugin is active, with no code required.<\/p>\n\n<p><strong>Order-Time Exchange Rate Snapshot<\/strong>\nThe exact exchange rate is saved to order meta when an order is placed. The snapshot (customer currency, store base currency, rate, and date) is visible in the WooCommerce admin order panel, the customer confirmation email, and the order-received page \u2014 useful for refunds, disputes, and currency reconciliation.<\/p>\n\n<p><strong>Per-Product Fixed Prices<\/strong>\nOverride the auto-converted price with an exact fixed amount for any product and currency. Set a fixed USD price, a fixed EUR price, and a fixed BDT price independently \u2014 all from the product edit page.<\/p>\n\n<p><strong>Smart Price Rounding<\/strong>\nFour rounding presets: Exact (precise decimal), Round (nearest integer), Charm (.95 endings), and .99 Pricing (.99 endings).<\/p>\n\n<p><strong>Gutenberg Block<\/strong>\nA native block for the WordPress Block Editor. Drag the Currency Switcher block into any page, post, or template. Configure style and flag display from the Inspector Controls panel. Works with Full Site Editing (FSE) block themes.<\/p>\n\n<p><strong>Navigation Menu Placement<\/strong>\nAdd the currency switcher to any WordPress navigation menu from Appearance \u2192 Menus. A dedicated \"Currency Switcher\" panel appears alongside Links and Pages \u2014 no code needed.<\/p>\n\n<p><strong>Theme Auto-Placement<\/strong>\nOne-click switcher placement in the header of Storefront, OceanWP, Astra, GeneratePress, and Kadence themes with zero code. Enable the toggle in Display settings and the switcher appears in the right spot for your theme.<\/p>\n\n<p><strong>3 Switcher Styles<\/strong>\nDropdown, button group, and select box \u2014 all with optional flag emoji, multiple label formats (symbol, code, symbol + code, full name), and full keyboard navigation with ARIA roles.<\/p>\n\n<p><strong>Shortcode &amp; Classic Widget<\/strong>\nPlace the switcher anywhere with <code>[storzen_currency_switcher]<\/code> or drag the widget into any sidebar from Appearance \u2192 Widgets.<\/p>\n\n<p><strong>Accessible &amp; Keyboard-Friendly<\/strong>\nFull keyboard navigation (arrow keys, Enter, Escape, Tab), ARIA listbox and aria-pressed roles, focus management, roving tabindex, and screen-reader labels on every interactive element.<\/p>\n\n\n\n<h4>\u26a1 Performance<\/h4>\n\n<ul>\n<li>Frontend CSS and JS load only when 2+ currencies are enabled<\/li>\n<li>Exchange rates cached in WordPress transients (configurable 1\u201348 hour interval)<\/li>\n<li>Database fallback table ensures rates are always available offline<\/li>\n<li>GeoIP result stored in a visitor cookie \u2014 no server-side per-IP storage<\/li>\n<li>AJAX price switch updates the DOM in place \u2014 no full page reload on shop\/product pages<\/li>\n<li>WooCommerce variation price hash modified per currency \u2014 no stale cached prices served<\/li>\n<\/ul>\n\n\n\n<h4>\ud83d\udd12 Privacy &amp; GDPR<\/h4>\n\n<p>This plugin makes requests to the following third-party services:<\/p>\n\n<p><strong>GeoIP detection<\/strong> (only when GeoIP is enabled in settings):\n* Service: api.country.is\n* Purpose: Detects visitor's country from their IP address to auto-select currency\n* Data sent: Visitor IP address\n* Privacy policy: https:\/\/country.is\/<\/p>\n\n<p><strong>Exchange rate data<\/strong> (when ExchangeRate-API or ECB is selected as rate source):\n* Service: open.er-api.com (ExchangeRate-API)\n* Purpose: Fetches live currency exchange rates\n* Data sent: No personal data \u2014 request is for rate data only\n* Privacy policy: https:\/\/www.exchangerate-api.com\/privacy<\/p>\n\n<ul>\n<li><strong>No personal data stored<\/strong> \u2014 the plugin does not log IPs or personal information<\/li>\n<li>GeoIP detection uses the visitor's IP only to return a country code \u2014 the IP is never stored<\/li>\n<li>Cookie set with <code>SameSite=Lax<\/code>, <code>Secure<\/code> on HTTPS, and <code>HttpOnly<\/code> for the country detection cookie<\/li>\n<li>Zero outbound data to plugin author servers<\/li>\n<\/ul>\n\n\n\n<h4>\ud83e\udde9 Compatibility<\/h4>\n\n<ul>\n<li>\u2705 WooCommerce 7.0+<\/li>\n<li>\u2705 WordPress 6.3+<\/li>\n<li>\u2705 HPOS (High-Performance Order Storage)<\/li>\n<li>\u2705 WooCommerce Cart &amp; Checkout Blocks<\/li>\n<li>\u2705 Block themes &amp; Full Site Editor (FSE)<\/li>\n<li>\u2705 Classic themes<\/li>\n<li>\u2705 WPML &amp; Polylang (with automatic language \u2192 currency mapping)<\/li>\n<li>\u2705 Storefront, OceanWP, Astra, GeneratePress, Kadence (auto-placement)<\/li>\n<li>\u2705 Elementor, Divi, Bricks, and all major page builders<\/li>\n<\/ul>\n\n\n\n<p><strong>Setup (takes 2 minutes):<\/strong><\/p>\n\n<ol>\n<li>Go to <strong>Currency Switcher<\/strong> in the WordPress left-hand menu<\/li>\n<li>On the <strong>General<\/strong> tab \u2014 select your mode (Full or Visual) and enable currencies<\/li>\n<li>On the <strong>Exchange Rates<\/strong> tab \u2014 choose your rate source (ECB is free, no key needed)<\/li>\n<li>Add the switcher via the Gutenberg block, nav menu, shortcode, or widget<\/li>\n<li>Done \u2713<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20the%20woocommerce%20block%20cart%20and%20checkout%3F\"><h3>Does this work with the WooCommerce block Cart and Checkout?<\/h3><\/dt>\n<dd><p>Yes. The plugin is declared compatible with WooCommerce Cart and Checkout Blocks. In Full Mode, prices convert throughout the entire block-based checkout experience.<\/p><\/dd>\n<dt id=\"is%20there%20a%20gutenberg%20block%3F\"><h3>Is there a Gutenberg block?<\/h3><\/dt>\n<dd><p>Yes. Search for \"Currency Switcher\" in the Block Editor inserter panel. The block supports all three switcher styles (dropdown, buttons, select) and lets you override the flag display setting per-block from the Inspector Controls panel.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20switcher%20to%20my%20navigation%20menu%3F\"><h3>How do I add the switcher to my navigation menu?<\/h3><\/dt>\n<dd><p>Go to Appearance \u2192 Menus, find the \"Currency Switcher\" panel in the left-hand column below Links, and click Add to Menu. The live switcher replaces the placeholder item on the frontend.<\/p><\/dd>\n<dt id=\"does%20it%20support%20wpml%20and%20polylang%3F\"><h3>Does it support WPML and Polylang?<\/h3><\/dt>\n<dd><p>Yes \u2014 with deep integration since v1.1.4. Go to Currency Switcher \u2192 Language Map and assign a currency to each language. When a visitor switches language, the currency switches automatically. Works with both WPML and Polylang with no code required.<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20a%20coupon%20to%20a%20specific%20currency%3F\"><h3>Can I restrict a coupon to a specific currency?<\/h3><\/dt>\n<dd><p>Yes. Open any coupon in WooCommerce \u2192 Coupons, scroll to the General options, and check the currencies the coupon should be valid for under \"Currency restriction\". Customers applying the coupon in a disallowed currency will see a clear error. Coupons with no currencies checked apply to all currencies.<\/p><\/dd>\n<dt id=\"can%20i%20hide%20payment%20gateways%20based%20on%20the%20active%20currency%3F\"><h3>Can I hide payment gateways based on the active currency?<\/h3><\/dt>\n<dd><p>Yes. Go to Currency Switcher \u2192 Payment Gateways and check which gateways to show for each enabled currency. Unchecked gateways are hidden at checkout for that currency. If no gateways are checked for a currency, all gateways are shown (safe default).<\/p><\/dd>\n<dt id=\"where%20is%20the%20exchange%20rate%20saved%20for%20each%20order%3F\"><h3>Where is the exchange rate saved for each order?<\/h3><\/dt>\n<dd><p>Since v1.1.3, the exact rate at order time is saved to order meta. You can see it in the WooCommerce admin order panel below the billing address, in the customer order confirmation email, and on the thank you page. The snapshot includes the customer currency, store base currency, exact rate, and the UTC timestamp.<\/p><\/dd>\n<dt id=\"is%20the%20european%20central%20bank%20rate%20source%20really%20free%3F\"><h3>Is the European Central Bank rate source really free?<\/h3><\/dt>\n<dd><p>Yes \u2014 completely free. The ECB publishes daily exchange rates as a public XML feed. No registration, no API key, and no usage limits. Rates update every business day.<\/p><\/dd>\n<dt id=\"what%20is%20visual%20mode%3F\"><h3>What is Visual Mode?<\/h3><\/dt>\n<dd><p>Visual Mode displays prices in the visitor's selected currency throughout your store but processes the actual payment in your store's base currency. It is ideal for stores that cannot process true multi-currency payments but want to show local currency prices to international customers.<\/p><\/dd>\n<dt id=\"does%20geoip%20detection%20slow%20down%20my%20site%3F\"><h3>Does GeoIP detection slow down my site?<\/h3><\/dt>\n<dd><p>No. The geolocation result is stored in a cookie for 30 days after the very first visit. No external API call is made on any subsequent page load. The initial detection call uses a 3-second timeout and has no impact on rendering performance.<\/p><\/dd>\n<dt id=\"can%20i%20set%20different%20prices%20per%20currency%20per%20product%3F\"><h3>Can I set different prices per currency per product?<\/h3><\/dt>\n<dd><p>Yes. Open any product edit page, go to the Currency Prices tab, and enter a fixed price for each enabled currency. Leave it blank to use the auto-converted rate.<\/p><\/dd>\n<dt id=\"does%20currency%20switching%20cause%20a%20full%20page%20reload%3F\"><h3>Does currency switching cause a full page reload?<\/h3><\/dt>\n<dd><p>No \u2014 since v1.1.2. On shop, archive, and single product pages, switching currency instantly updates all prices in the DOM via AJAX without a page reload. Cart and checkout pages reload because WooCommerce must recalculate totals, taxes, and shipping server-side.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20switcher%20to%20my%20store%3F\"><h3>How do I add the switcher to my store?<\/h3><\/dt>\n<dd><p>Four ways: Gutenberg block (search \"Currency Switcher\" in the Block Editor), nav menu (Appearance \u2192 Menus \u2192 Currency Switcher panel \u2192 Add to Menu), shortcode (<code>[storzen_currency_switcher]<\/code>), or widget (Appearance \u2192 Widgets \u2192 Multi Currency Switcher).<\/p><\/dd>\n<dt id=\"does%20it%20support%20variable%20products%3F\"><h3>Does it support variable products?<\/h3><\/dt>\n<dd><p>Yes. The plugin modifies the WooCommerce variation price cache hash per currency, so the correct converted prices are always served for variable products.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20my%20theme%3F\"><h3>Will it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. The plugin works with any properly coded WordPress theme. Storefront, OceanWP, Astra, GeneratePress, and Kadence have native auto-placement support. All other themes can use the block, shortcode, nav menu, or widget.<\/p><\/dd>\n<dt id=\"is%20any%20customer%20data%20sent%20to%20storzen%3F\"><h3>Is any customer data sent to Storzen?<\/h3><\/dt>\n<dd><p>No. Zero customer or store data is ever sent to Storzen servers. No analytics, no telemetry, and no third-party tracking SDKs are included in this plugin.<\/p>\n\n<\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>New: Role-based currency access, with a new Role Access tab. Roles with no restriction see every enabled currency.<\/li>\n<li>New: Developer hooks <code>storzen_cs_role_access_user_allowed<\/code>, <code>storzen_cs_role_access_exempt<\/code>, <code>storzen_cs_role_access_saved<\/code>.<\/li>\n<li>New: Theme Auto-Placement toggle and position setting added to the Display tab.<\/li>\n<li>Changed: GeoIP detection is now off by default and described in the settings screen. It is skipped for bots, cron, AJAX and REST requests, and a failed lookup is not retried for an hour.<\/li>\n<li>Changed: Pro notes in the free plugin now read \"See what Pro adds\" instead of \"Upgrade to unlock\".<\/li>\n<li>Fixed: Settings page CSS and JavaScript were not loading because of a wrong screen check.<\/li>\n<li>Fixed: Saving a settings tab could drop the auto-placement settings.<\/li>\n<li>Fixed: Rate refresh now keeps working when the refresh interval is not one of the supported values, and the recurring refresh is scheduled correctly after activation.<\/li>\n<li>Fixed: A failed rate download no longer repeats on every page load. Stored rates are served for 15 minutes first.<\/li>\n<li>Fixed: Newly enabled currencies get a rate straight away instead of showing a 1:1 price.<\/li>\n<li>Fixed: Mini-cart currency badge now shows on the storefront.<\/li>\n<li>Fixed: Database table creation and updates now also run after plugin updates.<\/li>\n<li>Fixed: GeoIP now looks up the visitor's own IP, not the server's.<\/li>\n<li>Fixed: Rate gap filling uses every enabled currency, so role rules never leave a currency without a rate.<\/li>\n<li>Fixed: uninstall.php no longer triggers database warnings, and now cleans every site on multisite.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>New: Currency-specific coupons \u2014 restrict any WooCommerce coupon to one or more currencies. A \"Currency restriction\" field appears on the coupon edit screen. Customers applying a coupon in a disallowed currency see a clear error message. Coupons with no restriction set apply to all currencies (safe default).<\/li>\n<li>New: WPML \/ Polylang language \u2192 currency auto-map \u2014 automatically switch currency when a visitor changes language. Configure pairs from the new \"Language Map\" admin tab. Compatible with both WPML and Polylang. Mappings saved before the multilingual plugin is installed activate automatically once detected.<\/li>\n<li>Improved: Admin settings \u2014 new \"Language Map\" tab with a language\/currency mapping table and informational notice when no multilingual plugin is active.<\/li>\n<li>Improved: load_plugin_textdomain() now called explicitly on init for compatibility with local and non-WP.org environments.<\/li>\n<li>Improved: Nav menu meta box JavaScript rewritten in vanilla JS \u2014 jQuery dependency removed from admin.<\/li>\n<li>Improved: Requires PHP bumped to 8.0 to match nullable typed property usage across includes.<\/li>\n<li>Fixed: WC tested up to updated to 11.0 (WooCommerce August 2026 release).<\/li>\n<li>Fixed: uninstall.php now cleans up all data added in v1.1.2 (storzen_cs_price_formats), v1.1.3 (storzen_cs_gateway_map, order snapshot meta), and v1.1.4 (storzen_cs_lang_map, coupon currency meta). HPOS-compatible order meta removal added.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>New: Currency \u2192 payment gateway mapping \u2014 restrict which payment gateways appear at checkout per currency. Configure from the new \"Payment Gateways\" admin tab. If no mapping is set for a currency, all gateways are shown (safe default).<\/li>\n<li>New: Order-time exchange rate snapshot \u2014 the exact rate is saved to order meta at checkout. The snapshot (currency, base currency, rate, date) appears in the WooCommerce admin order panel, customer order emails, and the order-received page. Useful for refunds, disputes, and reconciliation.<\/li>\n<li>Improved: Admin settings \u2014 new \"Payment Gateways\" tab with a checkbox table and per-row All \/ None quick-select buttons.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>New: Per-currency price format \u2014 set decimal separator, thousand separator, symbol position, and decimal places independently per currency. Live admin preview.<\/li>\n<li>New: AJAX no-reload currency switch \u2014 prices update in the DOM instantly on shop and product pages. Cart and checkout still reload.<\/li>\n<li>New: <code>storzenCSCurrencyChanged<\/code> JS custom event fires after every successful DOM price update.<\/li>\n<li>New: <code>data-base-price<\/code> attribute stamped on all WooCommerce price elements for accurate client-side re-conversion.<\/li>\n<li>Improved: <code>ajax_switch<\/code> AJAX response now includes rate, format, and mode data.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>New: Plugin renamed to \"Currency Switcher for WooCommerce \u2013 Multi Currency, Auto Rates &amp; GeoIP\" for better WP.org search visibility.<\/li>\n<li>New: Gutenberg block with Inspector Controls for style and flag display. Works with FSE themes.<\/li>\n<li>New: Navigation menu placement \u2014 add from Appearance \u2192 Menus, no code needed.<\/li>\n<li>New: Theme auto-placement for Storefront, OceanWP, Astra, GeneratePress, and Kadence.<\/li>\n<li>New: Rate freshness admin notice with one-click refresh button (Fetch API, no page reload).<\/li>\n<li>New: Mini-cart currency badge with Visual Mode charge notice.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Developer filter hooks on every price-conversion, switcher-render, and GeoIP-detection path: <code>storzen_cs_rate<\/code>, <code>storzen_cs_convert_price<\/code>, <code>storzen_cs_enabled_currencies<\/code>, <code>storzen_cs_switcher_html<\/code>, <code>storzen_cs_geoip_country<\/code>.<\/li>\n<li>Fixed: Plugin URI typo in main file header.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Multi-currency switcher for WooCommerce. Auto rates, GeoIP, WPML\/Polylang, per-currency coupons &amp; gateways, AJAX switch. Zero bloat.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/322190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=322190"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/devhasib"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=322190"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=322190"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=322190"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=322190"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=322190"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=322190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}