Multi-Currency Setup

June 5, 2026

How Super Speedy AJAX Prices behaves with currency-switcher plugins, and how to get them working together on fully-cached pages. Start with the compatibility overview in Compatibility & Integrations; this article goes deeper on the two switcher models and how to handle each.

Why currency and caching conflict

A full-page cache stores one copy of the HTML. If a currency switcher rewrites prices, a cached page can “freeze” whichever currency was active when it was cached — so a visitor in another currency sees the wrong one. This is the same problem the plugin solves for tax/geolocation, and the solution is the same: the real price is computed in the live AJAX request, after the cached page loads.

The key question for any switcher is where it decides the currency: on the server (per request) or in the browser (after load).

Model A — server-side switchers (the easy case)

Many currency plugins resolve the active currency server-side per request, from the visitor’s session/cookie or geolocation, and hook into WooCommerce’s pricing. Because the get_wc_prices AJAX request carries the visitor’s cookies and session, these switchers resolve the correct currency inside that request, and the price that gets swapped in is already in the right currency.

Setup:

  1. Configure the currency plugin as normal.
  2. Make sure the currency-selection cookie/session is not stripped by your cache or CDN on the admin-ajax.php request (it shouldn’t be — AJAX isn’t cached; see Caching Plugin Configuration).
  3. Test: switch currency, load a cached category page, confirm prices swap to the chosen currency.

Usually nothing plugin-specific is needed — it “just works” because the price is computed live.

Model B — client-side switchers (needs a nudge)

Some switchers change currency purely in the browser after the page has loaded (JavaScript reformatting prices client-side, often without a server round-trip). These can conflict because:

  • The plugin swaps in a server-computed price, and
  • The client-side switcher may have already reformatted the (cached) price, or may run before/after the swap unpredictably.

Setup / fixes:

  1. Prefer a server-side mode if the switcher offers one (many do) — that moves you to Model A.
  2. Re-apply the switcher after the price swap. The plugin fires wc_ajax_pricing_updated on document.body once prices are in. Hook it to re-run the switcher’s formatting:

js jQuery(document.body).on('wc_ajax_pricing_updated', function () { // re-trigger your currency switcher's reformat here // e.g. window.myCurrencySwitcher.refresh(); });

  1. Order matters: let this plugin win the price content, then let the switcher format it — not the other way around.

Variable products

When a visitor selects a variation, the plugin refreshes that product again (it listens to WooCommerce’s found_variation). With a server-side switcher the refreshed variation price is already in the right currency; with a client-side switcher, the wc_ajax_pricing_updated hook above will re-format it.

Verifying

  1. Set a non-default currency.
  2. Load a cached category page (confirm a cache HIT on the HTML).
  3. Confirm every product’s price shows in the selected currency after the AJAX swap — including after selecting a variation.
  4. Switch currency and repeat. If prices are momentarily in the wrong currency then correct themselves, you’re on Model B and should apply the re-trigger hook above.

Troubleshooting

  • Prices show the default/base currency on cached pages: the currency cookie/session isn’t reaching the AJAX request, or the switcher is client-side only. Confirm the cookie isn’t stripped on admin-ajax.php, or switch the plugin to a server-side mode.
  • Prices flash the wrong currency then correct: client-side switcher running out of order — use the wc_ajax_pricing_updated hook.
  • One product never updates: check it’s published and that its price is rendered through WooCommerce’s standard price filter (custom price markup can’t be swapped — see Compatibility & Integrations).

If your specific currency plugin needs steps beyond this, note the plugin name and behaviour for support — switcher internals vary, and a few need bespoke handling.

×
1/1