Changing your WooCommerce store currency
What happens to anchored and native products, and the order of operations that avoids a bad afternoon.
Changing the WooCommerce store currency is a significant operation with or without Price Anchor. With Price Anchor it is well-defined, which is not the same as risk-free.
What Price Anchor does automatically
- The store currency is read from
get_woocommerce_currency()and is never assumed, hardcoded or overridden. There is no special-cased currency anywhere in the plugin. - A store-currency change is one of the triggers that starts a repricing pass.
- Anchored products are recalculated against the new store currency, using the same source amounts you already entered.
- Native products keep their numbers. See Products that stay in your store currency for why.
- If the change would make your selected source currency equal to the new store currency, source pricing is reset safely rather than repricing the catalogue at a rate of one.
What you have to check yourself
- Your rate provider must support the new base currency. TCMB only works for TRY stores. If you move away from TRY, switch to Frankfurter or Manual first.
- Historic orders keep their original currency. That is correct and required — an order is evidence of what was charged — but your reports will now span two currencies and totals across the boundary are not comparable.
- Your payment gateways must accept the new currency.
- Rounding may want revisiting. A charm .99 rule that looked right at 30 EUR may look wrong at the equivalent in a currency with very different magnitudes.
A safe order of operations
- Do this on staging with a copy of production data.
- Change the rate provider first if the current one cannot serve the new base currency.
- Change the WooCommerce store currency.
- Fetch rates and confirm the rate table is populated for the new base.
- Run a full repricing pass and let it complete.
- Spot-check a simple product, a variable product, a product on sale and a native product.
- Review rounding, then repeat on production during a quiet window and purge your page cache.
Multisite
Every per-request cache in the plugin is keyed by site id, precisely so that switch_to_blog() cannot hand one site’s currency, markup, rates or provider set to another. On a single-site install the key is always 1 and costs nothing. If you run a network where sites use different currencies, this is the invariant that keeps them apart.