Skip to content Skip to sidebar

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

Sun Mon Tue Wed Thu Fri Sat
9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 - -
- - - - - - -

Supporter timezone: Asia/Yerevan (GMT+04:00)

This topic contains 6 replies, has 0 voices.

Last updated by Christopher Amirian 1 week ago.

Assisted by: Christopher Amirian.

Author Posts
October 5, 2025 at 12:30 am #17456408

bassaml

Background of the issue:
I am experiencing a persistent and critical issue with currency conversion using WooCommerce Multilingual & Multicurrency when combined with the LiteSpeed Cache (LSCache) plugin. I need the currency to be determined strictly by the customer's selection via the currency switcher and not by their language, geolocation, or any cached setting. I have attempted to implement the recommended cache separation fix by configuring the LSCache settings with Vary Cookies set to wcml_client_currency and Do Not Cache Cookies set to woocommerce_items_in_cart, woocommerce_cart_hash, and wp_woocommerce_session_.

Symptoms:
The currency switcher works initially, but the price reverts to the wrong currency after a short period or upon navigating to a different page, indicating that the page content is being served from a static cache file that doesn't respect the user's currency choice.

Questions:
Is there an additional WPML/WCML cookie that must be added to the LSCache Vary Cookies list to correctly separate the cache by currency?
Are there any specific PHP filters or hooks (e.g., related to wcml_user_store_strategy) I should implement in my theme's functions.php file to ensure the currency is always stored in a cookie instead of the session?
Are there any known LSCache exclusions (like URIs or query strings) specific to WooCommerce Multilingual that are mandatory to prevent currency conflict?

October 5, 2025 at 9:50 am #17456869

Christopher Amirian
WPML Supporter since 07/2020

Languages: English (English )

Timezone: Asia/Yerevan (GMT+04:00)

Hi,

Welcome to WPML support.

First things first, please update WPML and WCML as new versions have better integration with cache systems:

- IMPORTANT STEP! Create a backup of your website. Or better approach will be to test this on a copy/staging version of the website to avoid any disruption of a live website.
- Go to "WordPress Dashboard > Plugins > Add new > Commercial (tab)".
- Click the "Check for Updates" button.
- Update WPML and its addons there.

For more information:
https://wpml.org/faq/install-wpml/#automated-updates

Check if the issue is fixed. If not, then follow the steps below.

As I am not sure which might take effect, I will list all.

1) Vary / don’t-cache the right cookies

Keep what you already added and include all WCML cookies WPML support recommends so each currency gets its own cache bucket:

wcml_client_currency
wcml_client_country
wcml_client_currency_language
wcml_client_currency_switched

In LSCache:

Cache → Cache → Vary Cookies: add wcml_client_currency (you can add the others too if your setup uses them).

Cache → Excludes → Do Not Cache Cookies: keep your WooCommerce session/cart cookies; add the WCML cookies above if you still see bleed-through.

We had something similar for Kinsta:

https://wpml.org/errata/woocommerce-multilingual-currency-switching-issue-with-kinsta-cache/

2) Store the currency in a cookie (not only WC session)

Force WCML to use a cookie so the cache can reliably key by it:

// Store selected currency in a cookie instead of WC session
add_filter( 'wcml_user_store_strategy', function () {
    return 'cookie'; // default is 'wc-session'
} );

For more information:

https://wpml.org/wcml-hook/wcml_user_store_strategy/

3) Enable WCML’s “cache per currency” behavior

WCML has a switch that helps caches keep a distinct version per currency:

add_filter( 'wcml_is_cache_enabled_for_switching_currency', '__return_true' );

For more information:

https://wpml.org/forums/topic/multicurrency-switcher-issue-2/

4) Exclude the usual WooCommerce pages / endpoints from full-page cache

Even with per-currency variance, you should keep dynamic commerce endpoints un-cached:

URIs: /cart/, /checkout/, /my-account/

wc-ajax=… requests (LiteSpeed normally handles this, but verify)

WPML’s multicurrency + caching errata warns that caching can serve incorrect prices if dynamic bits are cached; excluding the commerce endpoints avoids that.

For more information:

https://wpml.org/errata/caching-plugins-may-cause-issues-with-wcml-multi-currency-settings/

Answers to your questions

Q1. Another WPML/WCML cookie to add?

Yes—besides wcml_client_currency, add wcml_client_country, wcml_client_currency_language, and wcml_client_currency_switched as needed.

Q2. Filters/hooks to ensure cookie storage?

Use wcml_user_store_strategy to return 'cookie' so the selection is always persisted in a cookie (cache-friendly). Optionally enable wcml_is_cache_enabled_for_switching_currency to allow per-currency cached pages.

Q3. LSCache exclusions specific to WCML?

Exclude dynamic WooCommerce endpoints from full-page cache and make sure the cache varies by wcml_client_currency (and related cookies).

Thanks.

October 5, 2025 at 1:08 pm #17457169

bassaml

It is deeply disappointing that I have wasted so much time using ChatGPT 2 and Gemini Assistant for over a month with no benefit, despite the addon being a paid product. I have been running in a vicious circle of solutions that lead nowhere.

Therefore, I have decided to look for an alternative addon that provides a built-in solution for this multicurrency problem without affecting the theme's structure, or to abandon the multi-currency option on my site entirely.

It is worth noting that this is not my only issue with WPML. Previously, I had to delete buttons from the header simply because I could not find a way to control the display of the language selector dropdown menu.

October 6, 2025 at 6:41 am #17458215

Christopher Amirian
WPML Supporter since 07/2020

Languages: English (English )

Timezone: Asia/Yerevan (GMT+04:00)

Hi,

I'm sorry that you found working with WPML difficult. We are here to help as much as we can.

Unfortunately, I did not exactly understand what you meant by the response. Did you test the steps I mentioned and the issue still persists after a few minutes, like you described?

If you give us the steps you took and double-check if you followed the steps mentioned in the previous reply I'dbe able to get a better grasp.

Thanks.

October 6, 2025 at 6:41 am #17458216

Christopher Amirian
WPML Supporter since 07/2020

Languages: English (English )

Timezone: Asia/Yerevan (GMT+04:00)

Hi,

I'm sorry that you found working with WPML difficult. We are here to help as much as we can.

Unfortunately, I did not exactly understand what you meant by the response. Did you test the steps I mentioned and the issue still persists after a few minutes, like you described?

If you give us the steps you took and double-check if you followed the steps mentioned in the previous reply I'dbe able to get a better grasp.

Thanks.

October 8, 2025 at 4:21 pm #17468158
bassaml

ignore multicurrency
now, I have another problem
this message "The WPML Media Translation setup is almost complete. Click here to finish the setup." stucked
I do everythink to remove
I complete all translete and update everythink

New threads created by Christopher Amirian and linked to this one are listed below:

https://wpml.org/forums/topic/split-media-translation-wizard-message-stuck/

October 9, 2025 at 10:48 am #17470736

Christopher Amirian
WPML Supporter since 07/2020

Languages: English (English )

Timezone: Asia/Yerevan (GMT+04:00)

Hi,

I created a separate ticket for the new question to make sure we serve you the best and keep things organized.

I answered there:

https://wpml.org/forums/topic/split-media-translation-wizard-message-stuck/

Thanks.