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 |
|---|---|---|---|---|---|---|
| - | 10:00 – 17:00 | 10:00 – 17:00 | 10:00 – 17:00 | 10:00 – 17:00 | 10:00 – 17:00 | - |
| - | 18:00 – 19:00 | 18:00 – 19:00 | 18:00 – 19:00 | 18:00 – 19:00 | 18:00 – 19:00 | - |
Supporter timezone: Asia/Kathmandu (GMT+05:45)
Tagged: WCML
Related documentation:
This topic contains 8 replies, has 0 voices.
Last updated by Shekhar Bhandari 1 month, 2 weeks ago.
Assisted by: Shekhar Bhandari.
| Author | Posts |
|---|---|
|
July 21, 2026 at 10:50 am
#18168824
|
|
|
WCML: custom prices in a secondary currency resolve correctly in only one language at a time Site: vahana.fr Summary On a variable product with manually set custom prices in a secondary currency (USD), the custom price is honoured on only one of the two language versions at a time, and which one depends on whether a custom sale price is set: Custom USD prices on the variationsFrench URL (original)English URL (translation)Regular 499, no sale price$374.17 — wrong$499 — correctRegular 499, sale 498$499 / $498 — correct$374.17 — wrong In both cases exactly one language is wrong, and the wrong value is always the same fallback figure: the EUR ex-VAT price passed through the configured exchange rate. Adding or removing the custom sale price flips which language is broken. We have confirmed the French failure against an uncached render (see "Cache ruled out" below), so this is not a page-cache artefact. Environment Base currency: EUR (default) All USD prices are set manually per variation, on the French (original) product. We do not rely on automatic conversion for any product — the 1 EUR = 1 USD rate exists only because a value is required. The English translation does not display a USD price field in the admin, so we understand it inherits the custom prices from the French original. Expected behaviour A visitor from a USD country sees the manually entered USD price, without French VAT, on both the French and English URLs. Actual behaviour One language shows the manual USD price; the other shows EUR ex-VAT price × exchange rate. Worked example Product: FlyPad® (post ID 31277, French original), variable product, 10 colour variations. EUR price entered in admin (ex-VAT): 374.17 Displayed to a US visitor on the French URL: $374.17 Which is exactly: 449.00 ÷ 1.20 = 374.17 (EUR price ex-VAT) The $499 custom price is discarded. On the English URL, the same product correctly shows $499. The wrong figure appears in the visible page price, in the twitter:data1 meta tag, and in the Product structured data — i.e. it originates in the product object, not in any single output layer. Selecting a colour variation does not change the price. All ten variations display $374.17, so this is not a parent price-range aggregation issue. Cache ruled out The French URL was requested from a US IP with a cache-busting query string, which bypasses WP Rocket (confirmed by the generator meta tag changing from WP Rocket to WPML ver:4.9.5 on the uncached response): hidden link The uncached response still contains $374.17, both as the visible price and in twitter:data1. Caches (WooCommerce transients, product lookup tables, WP Rocket, Rocket.net, Cloudflare) were also fully cleared beforehand. Reproduction Test A — adding a custom sale price fixes French and breaks English Product 31277 (FlyPad®), Variations tab. "Set prices in other currencies manually" is selected on every variation. Custom USD regular price = 499, sale price empty. Result: French now displays $499 struck through with $498 active — correct. English now displays $374.17 — wrong. The two swapped. Test B — removing a custom sale price breaks a working product Product 49610 (FlyPad® Poney), which was displaying correctly at $449 (custom USD regular 479, sale 449). Result: displays 357.50 / 332.50 — the EUR ex-VAT regular and sale figures passed through the 1 EUR = 1 USD rate. The custom USD regular price of 479 is discarded. Same failure signature as FlyPad®. Correlation across the catalogue Before any testing, five comparable variable products were configured identically apart from the presence of a custom USD sale price. Observed on the French URLs from a US IP: ProductPost IDUSD regularUSD saleDisplayedCorrect?FlyPad® Poney49610479449$449yesFlyPad® Mini49528459439$439yesFlyPad® Aqua33756479449$449yesFlyPad® Aqua Poney49432459419$419yesFlyPad®31277499(none)$374.17no Every product displaying correctly on the French URL has a custom USD sale price, and in every case it is the sale price that is displayed. No product is successfully displaying a custom USD regular price on the French URL. Variation count is not a factor: FlyPad® Aqua has 1 variation and works, FlyPad® Aqua Poney has 2 and works, FlyPad® has 10 and fails. What we have already ruled out Not a caching artefact. Reproduced on an uncached render with WP Rocket bypassed, after clearing all cache layers. Impact A public product page shows US and Canadian customers a price matching neither the European price nor the intended US price. Current position We have reverted FlyPad® to a custom USD regular price of 499 with no sale price, because the English URL matters more to us for international sales. The French URL is therefore currently serving $374.17 to US visitors. We have no configuration that makes both languages correct simultaneously. Questions for support Why does the custom secondary-currency price resolve correctly on only one language version at a time, and why does adding a custom sale price invert which language is affected? |
|
|
July 22, 2026 at 8:52 am
#18170772
|
|
|
Shekhar Bhandari WPML Supporter since 03/2015
Languages: English (English ) Timezone: Asia/Kathmandu (GMT+05:45) |
Hello there, Thank you for contacting WPML support. I'd be happy to assist you with this issue. Thank you for the thorough investigation and for documenting your findings so clearly. The level of detail you've provided, including the reproduction steps, expected versus actual behavior, and the troubleshooting you've already performed, is very helpful. From your description, I understand the issue can be summarized as follows: Scenario 1 Custom USD Regular Price: $499 Scenario 2 Custom USD Regular Price: $499 I can also see that you've already ruled out common causes such as caching, tax configuration, schema generation, variation aggregation, and missing custom price metadata, and that the incorrect value consistently falls back to the converted EUR ex-VAT price. To investigate this further, I'd first like to determine whether the behavior can be reproduced on a clean installation. Could you please try reproducing the issue on the following sandbox site? hidden link If you're able to reproduce the issue there, please let me know the exact steps you followed, including the product configuration and currency settings. This will help me verify the behavior on my side. If the issue cannot be reproduced on a clean installation, we'll continue investigating what may be specific to your site's configuration. I look forward to your reply. Thanks. |
|
July 22, 2026 at 6:33 pm
#18172243
|
|
|
I will make a clone on staging turn off everything I can see where we are . does that work? if the issue continues I can then create a fresh site and recreate the issue. I will reply when it's up and running . thank you for you time. |
|
|
July 23, 2026 at 4:20 am
#18172581
|
|
|
Shekhar Bhandari Supporter |
Sure, look forward to your reply. |
|
July 23, 2026 at 2:51 pm
#18174117
|
|
|
Hello, I have migrated the site to staging. I have turned off everything except WMPL , woo commerce and blocksy pro companion. I had turned if off too and the problem persists but it's much harder to switch between languages. So I turned if back on so you could see it more easily. this is the french page of this product here the english. hidden link the ENG still show the price correctly and the FR shows the $374.17 would you like access to the admin of this site? I can add the plugin to share temporary admin. let me know when let me know where I can send that privately. I think I will need your email to give the access. thank you for your help |
|
|
July 24, 2026 at 4:42 am
#18174638
|
|
|
Shekhar Bhandari Supporter |
Hello there, I would require your permission to disable/enable theme/plugins too. To debug this issue further, I would need to check your site settings once, for this I would need temporary access (wp-admin and ftp) to your site. So could you please provide me with those details, you will find the needed fields for this below the comment area when you log in to leave your next reply. This info is private and available to you and WPML supporters only. Note: Look forward to your reply. Thanks |
|
July 24, 2026 at 9:09 am
#18175085
|
|
|
Shekhar Bhandari Supporter |
Hello there, If I deactivate the Blocksy Companion (Premium) plugin and update the product once, the problem is not appearing at all. It looks like plugin is making some changes to the product price. Can you please check and confirm this? Look forward to your reply. Thanks |
|
July 24, 2026 at 5:11 pm
#18176010
|
|
|
I see it seems to be working. as I mentioned I had turned it off and it still had the incorrect prices showing. but as you said you updated the product. and it works correctly now. I had not updated the product after I turned off the plugin. |
|
|
July 27, 2026 at 4:33 am
#18178096
|
|
|
Shekhar Bhandari Supporter |
Sure, will wait for your feedback. |
The topic ‘[Closed] custom prices in a secondary currency resolve correctly in only one language at a time’ is closed to new replies.