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