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.

This topic contains 1 reply, has 0 voices.

Last updated by Andreas W. 6 days, 16 hours ago.

Assisted by: Andreas W..

Author Posts
August 7, 2025 at 11:19 pm #17304162

Kresimir

Background of the issue:
I'm using the WCML plugin to add and display different prices depending on the site language and currency. Each language has only one currency, and we won't be using any currency switchers on the site. I've checked the wcml_product_price_by_currency filter where this functionality is handled.

Symptoms:
Some currencies don't have a price yet, and WCML fetches the default currency price if the current currency doesn't have a price. Setting prices to '0' in the database doesn't work as it still uses the default currency price.

Questions:
Is there any way to not display prices in currencies that don't have a price entered yet?
Can we modify the wcml_product_price_by_currency filter to avoid displaying prices for languages/currencies that don't have a price entered?

August 9, 2025 at 7:08 pm #17307062

Andreas W.
WPML Supporter since 12/2018

Languages: English (English ) Spanish (Español ) German (Deutsch )

Timezone: America/Lima (GMT-05:00)

Hi Kresimir,

Thanks for the detailed explanation!

Our add-on WooCommerce Multilingual is designed to use the product data from the original product and synchronize it across translations. This includes prices, stock, and other core fields, ensuring consistency and centralized inventory management.

Because of this, we generally don’t recommend altering this behavior, as it could lead to unexpected issues with WooCommerce — especially around stock synchronization, cart logic, and checkout.

Also note: custom prices for other currencies can only be edited on the original product, not on its translations.

For example, if you have a product in English and a translated product in German, you would go to the original English product and manually set prices for each currency. These prices can differ per currency, and if a custom price is set, WCML will use it instead of applying the exchange rate.

If now the currencies are only enabled for specific languages, this will solve your issue.

The filter wcml_product_price_by_currency will only work if a custom price is set for the active currency on the original product. It will not take effect if the custom price field is left empty.

You could set the prices to "0" using a hook like wcml_raw_price_amount, but note that this will not prevent visitors from buying them. For this, you would also need to set the stock to "0" and you might then run into issues later on to sync the stock again, when actually a custom price will be entered on the original product for the first time.

If no custom price is set, you can hide the translated product by setting it as "Private" or "Draft" on the WordPress Editor, or simply make sure that all original products have custom prices for each currency.

As I said, these prices can be different in each currency.

Please kindly note that custom code solutions and issues that go beyond WPML’s built-in functionality are not covered by our support team. Our support team isn’t obligated to provide or test any custom code implementations, even though I truly tried to find a solution in this case, but it did cause unexpected issues and became too complex to be solvable.

If you need a custom solution for this issue, you might need to consider reaching out to an independent contractor.

I hope for your understanding.

Best regards,
Andreas