WPML
Statut
Résolu
Résolu dans
WPML Multilingual & Multicurrency for WooCommerce 5.5.4
Étiquettes de sujet
WCML

Aperçu de l’anomalie

Une requête REST vers le point de terminaison des commandes pour récupérer les détails d’une commande peut donner des résultats inattendus lorsque la commande a été passée dans une langue secondaire, ou si un paramètre ‘lang’ est spécifié, et que la commande contient des produits variables.

Le product_id du produit parent peut être traduit mais le variation_id de la variante commandée peut ne pas l’être, et le nom du produit sera celui du parent et non celui de la variante.

Solution de contournement

Nous avons identifié la cause sous-jacente et fournirons un correctif dans une prochaine version publiée. En attendant, le problème peut être résolu en modifiant le fichier de l’extension plugins/woocommerce-multilingual/classes/Rest/Wrapper/Orders/Languages.php et en remplaçant l’ensemble de la fonction « prepare » (à partir de la ligne 42 environ) par

	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;
	}

Toutes les anomalies connues →