- Status
- Offen
- Gemeldet für
- WPML Multilingual & Multicurrency for WooCommerce 5.3.2
- Zugehöriges Plugin/Theme
- WooCommerce Subscriptions
- Themen-Tags
- Compatibility, WCML
Übersicht über das Problem
In WooCommerce Subscriptions wird beim Aktualisieren eines Abonnements (sei es ein Upgrade, Downgrade oder Crossgrade) der Preis nicht korrekt gefiltert. Dies führt zu falschen Preisen beim Wechsel von Abonnement-Plänen.
Problemumgehung
Bitte stellen Sie sicher, dass Sie über ein vollständiges Backup Ihrer Website verfügen, bevor Sie fortfahren.
- Öffnen Sie die Datei …/wp-content/plugins/woocommerce-multilingual/compatibility/WcSubscriptions/MulticurrencyHooks.php.
- Suchen Sie nach Zeile 253.
- Ändern Sie:
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; } - in:
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; }