WPML
สถานะ
แก้ไขแล้ว
แก้ไขใน
WPML Multilingual & Multicurrency for WooCommerce 5.5.4
แท็กหัวข้อ
WCML

ภาพรวมของปัญหา

คำขอ REST ไปยังเอนด์พอยต์ orders เพื่อดึงรายละเอียดของคำสั่งซื้ออาจให้ผลลัพธ์ที่ไม่คาดคิดเมื่อคำสั่งซื้อถูกสร้างขึ้นในภาษารอง หรือหากระบุพารามิเตอร์ ‘lang’ และคำสั่งซื้อนั้นมีสินค้าแบบมีตัวเลือก

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

ปัญหาที่ทราบแล้วทั้งหมด →