WPML
상태
해결됨
해결된 버전
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;
	}

알려진 모든 문제 →