This thread is resolved. Here is a description of the problem and solution.
Problem:
You have set up the multi-currency function in WPML with German as the default language and linked the currency CHF to the German language. However, when visiting a product page, the currency switches back to EUR after 2 seconds.
Solution:
This issue is related to the
BM_Update_Price::update_price()
method, which is hooked to AJAX. To fix this, you need to add it to our AJAX filters using the wcml_multi_currency_ajax_actions filter.
Add the following code to the functions.php of your theme:
// WPML Workaround for compsupp-7663<br />add_filter( 'wcml_multi_currency_ajax_actions', 'wpml_compsupp7663_add_actions_to_multi_currency_ajax', 10, 1 );<br /><br />function wpml_compsupp7663_add_actions_to_multi_currency_ajax( $ajax_actions ) {<br /><br /> $ajax_actions[] = 'update_price'; // Add a AJAX action to the array<br /> return $ajax_actions;<br /><br />}
Please test this solution and provide feedback. If it resolves the issue, we recommend sharing this workaround with the plugin developers.
If this solution does not apply to your case, or if it seems outdated, we highly recommend checking related known issues at https://wpml.org/known-issues/, verifying the version of the permanent fix, and confirming that you have installed the latest versions of themes and plugins. If issues persist, please open a new support ticket.
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.
Tagged: Compatibility, Go Global Application, WCML
Related documentation:
This topic contains 12 replies, has 2 voices.
Last updated by johannesB-16 3 weeks, 5 days ago.
Assisted by: Christopher Amirian.
Author | Posts |
---|---|
October 22, 2024 at 9:27 am #16316009 | |
johannesB-16 |
Background of the issue: Symptoms: Questions: |
October 22, 2024 at 9:42 am #16316156 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi, There was no answer in the chat. I turned the chat into a ticket to be able to answer the question. That 2 second point you have mentioned suggests that it might be a javascript code of some sort causing the change. To make sure if it is or not please do as follows: - 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. FYI: The response time in tickets is longer than in chat. Thank you. |
October 23, 2024 at 6:52 am #16320056 | |
johannesB-16 |
Hi, I was able to track down the issue to the plugin 'B2B Market'. The developers of the plugin have told me the following: Can you do anything with this or give me further assistance? Many thanks in advance! |
October 23, 2024 at 3:17 pm #16322573 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi, This seems to be a compatibility issue with the B2b Market plugin. We can report this to the compatibility team. There is no guarantee for a fix but if the developers of the plugin cooperate we might find a solution. To be able to report the compatibility issues we need to replicate the issue on a clean installation. You can access the WordPress dashboard using the link below: Kindly follow the steps below: - Install the plugin in question This will help us to report the probable issue to the compatibility team and solve the possible problem faster. |
October 24, 2024 at 1:03 pm #16326426 | |
johannesB-16 |
Hi, For customer group 'B2B' exists a 10% discount. hidden link |
October 24, 2024 at 1:48 pm #16326739 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi, Thank you very much. I did some testing and I see if I go to WordPress Dashboard > WPML > Settings > Store a language cookie to support language filtering for AJAX And uncheck that option, the changing of the currency does not happen: hidden link Thanks. |
October 24, 2024 at 2:22 pm #16326923 | |
johannesB-16 |
Hi and thanks for the quick reply. If I go to the product page and select customer group 'B2B', the issue still occurs? |
October 27, 2024 at 2:36 pm #16334836 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi, You are correct, I created a report to the compatibility team. I'd appreciate it that you also share the form below with the plugin developer: https://wpml.org/documentation/support/go-global-program/ By registering there we will help the plugin developer to make their product compatible with Woocommerce Multilingual. If I have an update from the compatibility team I will share here. Thanks |
October 30, 2024 at 8:31 am #16345256 | |
johannesB-16 |
Ok, thanks for the reply. Should I leave the B2B-Market plugin connected to the sandbox installation? Thanks in advance and I will forwad the link to the plugin author. |
October 30, 2024 at 3:42 pm #16348208 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi, I have an answer from the compatibility team. This issue is related to the BM_Update_Price::update_price() method (app/public/wp-content/plugins/b2b-market/src/class-bm-update-price.php) which is hooked to AJAX in app/public/wp-content/plugins/b2b-market/src/class-bm-hooks.php: public function init_bm_update_price() { $update_price = BM_Update_Price::get_instance(); add_action( 'wp_enqueue_scripts', array( $update_price, 'load_assets' ) ); add_action( 'woocommerce_before_add_to_cart_form', array( $update_price, 'add_hidden_id_field' ), 5 ); add_action( 'wp_ajax_update_price', array( $update_price, 'update_price' ) ); add_action( 'wp_ajax_nopriv_update_price', array( $update_price, 'update_price' ) ); } In order to fix this, we need to add it to our AJAX filters using the wcml_multi_currency_ajax_actions filter: https://wpml.org/wcml-hook/wcml_multi_currency_ajax_actions/ Workaround: Add the code below to the functions.php of your theme: // WPML Workaround for compsupp-7663 add_filter( 'wcml_multi_currency_ajax_actions', 'wpml_compsupp7663_add_actions_to_multi_currency_ajax', 10, 1 ); function wpml_compsupp7663_add_actions_to_multi_currency_ajax( $ajax_actions ) { $ajax_actions[] = 'update_price'; // Add a AJAX action to the array return $ajax_actions; } Would you please test and get back to us with the result? And if it works, I'd appreciate it if you share it with the plugin developers? Thanks. |
October 31, 2024 at 6:58 am #16349752 | |
johannesB-16 |
Hi and thanks for the quick response from your compatibility team. Unfortunately this workaround doesn't work. I tried it on the sandbox installation and also on my staging site. Sorry. |
October 31, 2024 at 1:41 pm #16351601 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi, Thank you. it seems that you added the code before the Endif; in theme functions.php I made sure that the code is at the very end of the file and it works ok for me now: hidden link Thanks. |
November 4, 2024 at 7:46 am #16358962 | |
johannesB-16 |
Hello Christopher and thank you for taking another look at the code. Thanks in advance! |
November 4, 2024 at 10:13 am #16360048 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi, I am not sure about Astra, but maybe the same error in adding the code that you had for the default theme happens on Asra theme. I can take a look at the code you added in functions.php and see if it is added correctly. To do that I will need you to set the next reply as private and provide the login information as the previous login info is deleted by the system. Thanks. |
November 6, 2024 at 1:05 pm #16371820 | |
Christopher Amirian Supporter
Languages: English (English ) Timezone: Asia/Yerevan (GMT+04:00) |
Hi thanks, I unpublished the code from the snippet plugin you used and went to Appearance > Theme file editor and went to functions.php and added the code there. After that I saw that you did not select which currency to show in each language in multi-currency settings and you set all to KEEP. I went there and set USD for English and EURO for German. Now if you check you will see that the currencies work ok in English and German. Select the ones you like for the other languages in Woocomemrce > Woocommerce multilingual & Multi-currency . Multi-currency (tab) (check the screenshot) Thanks. |