WPML
Estado
Resuelto
Resuelto en
WPML Multilingual & Multicurrency for WooCommerce 5.5.4
Etiquetas de temática
WCML

Resumen del problema

Una petición REST al endpoint de pedidos para obtener los detalles de un pedido puede producir resultados inesperados cuando el pedido se realizó en un idioma secundario, o si se especifica un parámetro ‘lang’, y el pedido contiene productos variables.

El product_id del producto padre puede estar traducido, pero el variation_id de la variante pedida puede que no lo esté, y el nombre del producto será el del padre y no el de la variante.

Solución alternativa

Hemos identificado la causa subyacente y proporcionaremos una solución en una próxima versión. Mientras tanto, el problema se puede solucionar editando el archivo del plugin plugins/woocommerce-multilingual/classes/Rest/Wrapper/Orders/Languages.php y reemplazando toda la función «prepare» (aproximadamente desde la línea 42) por

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

Todos los problemas conocidos →