- الحالة
- محلولة
- تم حلها في
- WPML Multilingual & Multicurrency for WooCommerce 5.5.4
- وسوم الموضوع
- WCML
نظرة عامة على المشكلة
قد يعطي طلب REST إلى نقطة نهاية الطلبات لاسترداد تفاصيل طلب نتائج غير متوقعة عندما يتم تقديم الطلب باللغة الثانوية، أو عند تحديد المعلمة ‘lang’، ويحتوي الطلب على منتجات متغيرة.
قد تتم ترجمة product_id للمنتج الأصلي ولكن قد لا تتم ترجمة variation_id للمتغير المطلوب، وسيكون اسم المنتج هو اسم المنتج الأصلي وليس اسم المتغير.
حل بديل مؤقت
لقد حددنا السبب الأساسي وسنقدم إصلاحاً في إصدار قادم. في غضون ذلك، يمكن إصلاح المشكلة عن طريق تعديل ملف الإضافة plugins/woocommerce-multilingual/classes/Rest/Wrapper/Orders/Languages.php واستبدال دالة ‘prepare’ بالكامل (من السطر 42 تقريباً) بـ
public function prepare( $response, $object, $request ) {
$language = get_query_var( 'lang' ) ?: $request->get_param( 'lang' );
$orderLanguage = WCML_Orders::getLanguage( $this->get_id( $object ) );
if ( $orderLanguage !== $language ) {
$lineItems = Obj::propOr( [], 'line_items', $response->data );
foreach ( $lineItems as $k => $item ) {
$translatedProductId = wpml_object_id_filter( $item['product_id'], 'product', false, $language );
$translatedVariationId = ( $item['variation_id'] == 0 ) ? 0 : wpml_object_id_filter( $item['variation_id'], 'product_variation', false, $language );
if ( $translatedProductId ) {
$response->data['line_items'][ $k ]['product_id'] = $translatedProductId;
$translatedProduct = get_post( $translatedProductId );
$postName = $translatedProduct->post_title;
if ( $translatedVariationId ) {
$response->data['line_items'][ $k ]['variation_id'] = $translatedVariationId;
$translatedVariation = get_post( $translatedVariationId );
$postName = $translatedVariation->post_title;
}
$response->data['line_items'][ $k ]['name'] = $postName;
}
}
}
return $response;
}