- סטטוס
- נפתר
- נפתר בגרסה
- 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;
}