- الحالة
- مفتوحة
- أُبلغ عنها لـ
- WPML Multilingual & Multicurrency for WooCommerce 5.3.2
- الإضافة/القالب ذو الصلة
- WooCommerce Subscriptions
- وسوم الموضوع
- Compatibility, WCML
نظرة عامة على المشكلة
في WooCommerce Subscriptions، عند تحديث اشتراك (سواء كان ذلك ترقية أو تخفيضاً أو تغييراً موازياً)، لا تتم تصفية السعر بشكل صحيح. يؤدي هذا إلى تسعير غير صحيح أثناء تغيير خطط الاشتراك.
حل بديل مؤقت
تأكد من أخذ نسخة احتياطية كاملة لموقعك قبل المتابعة.
- افتح الملف …/wp-content/plugins/woocommerce-multilingual/compatibility/WcSubscriptions/MulticurrencyHooks.php.
- ابحث عن السطر 253.
- غيّر:
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; } - إلى:
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; }