Open
Reported for: WooCommerce Multilingual & Multicurrency 5.3.2
Overview of the issue
In WooCommerce Subscriptions, when updating a subscription (whether it’s an upgrade, downgrade, or crossgrade), the price isn’t filtered correctly. This results in incorrect pricing during the change of subscription plans.
Workaround
Please, make sure of having a full backup of your site before proceeding.
- Open …/wp-content/plugins/woocommerce-multilingual/compatibility/WcSubscriptions/MulticurrencyHooks.php file.
- Look for line 253.
- Change:
12345678910111213
public
function
woocommerce_subscription_price_from(
$price
,
$product
) {
if
(
$product
instanceof
WC_Product_Subscription_Variation ) {
$customPricesOn
= get_post_meta(
$product
->get_id(),
'_wcml_custom_prices_status'
, true );
if
(
$customPricesOn
) {
$price
= get_post_meta(
$product
->get_id(),
'_price_'
.
$this
->woocommerce_wpml->multi_currency->get_client_currency(), true );
}
else
{
$price
= apply_filters(
'wcml_raw_price_amount'
,
$price
);
}
}
return
$price
;
}
- For:
12345678910111213141516171819202122232425
public
function
woocommerce_subscription_price_from(
$price
,
$product
) {
if
(
$product
instanceof
WC_Product_Subscription_Variation ||
$product
instanceof
\WC_Product_Subscription) {
$customPricesOn
= get_post_meta(
$product
->get_id(),
'_wcml_custom_prices_status'
, true );
if
(
$customPricesOn
) {
$price
= get_post_meta(
$product
->get_id(),
'_price_'
.
$this
->woocommerce_wpml->multi_currency->get_client_currency(), true );
}
else
{
$id
=
$product
->get_id();
$type
= get_post_type(
$id
);
$trid
= apply_filters(
'wpml_element_trid'
, NULL,
$id
,
'post_'
.
$type
);
$translations
= apply_filters(
'wpml_get_element_translations'
, NULL,
$trid
,
'post_'
.
$type
);
foreach
(
$translations
as
$translation
){
if
(
$translation
->original == 1){
if
( get_post_meta(
$translation
->element_id,
'_wcml_custom_prices_status'
, true ) ) {
$price
= get_post_meta(
$translation
->element_id,
'_price_'
.
$this
->woocommerce_wpml->multi_currency->get_client_currency(), true );
}
else
{
$price
= apply_filters(
'wcml_raw_price_amount'
,
$price
);
}
}
}
}
}
return
(int)
$price
;
}
This fix looks like it tackles only the “From” price, which is just graphics/information and does not fix the issue in the cart.
Originally, I reported these two issues, and your team decided to create two different tickets.
So, you started to solve the first part of the ticket here: Link to Ticket 1
While working on the second part of the split ticket here: Link to Ticket 2.
It looks like splitting the original ticket created a bit of redundancy for your support, as you also saw issue one while trying to fix issue two. Perhaps you should assign one person to address both issues.
Thanks for the effort to resolve the issue
Thank you for your report. I see that you have updated both tickets as well, you should get an update soon.
Regards
I have the same problem, it doesn’t change the price in subscription products, it only changes the currency. How can I solve it?
If the workaround here available doesn’t help, please start a chat in our assistance channel.
In that way, one of our specialists will take care of your case.