- 상태
- 해결됨
- 해결된 버전
- WPML Multilingual & Multicurrency for WooCommerce 5.5.4
- 주제 태그
- WCML
문제 개요
주문이 보조 언어로 이루어졌거나 ‘lang’ 매개변수를 지정한 경우, 그리고 주문에 옵션 상품이 포함된 경우 주문 세부 정보를 검색하기 위한 orders 엔드포인트에 대한 REST 요청이 예상치 못한 결과를 반환할 수 있습니다.
상위 상품의 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;
}