WPML
Trạng thái
Đã giải quyết
Đã giải quyết trong
WPML Multilingual & Multicurrency for WooCommerce 5.5.4
Thẻ chủ đề
WCML

Tổng quan về lỗi

Một yêu cầu REST đến endpoint của đơn hàng để lấy chi tiết của một đơn hàng có thể trả về kết quả không như mong đợi khi đơn hàng được tạo bằng một ngôn ngữ phụ, hoặc nếu có chỉ định tham số ‘lang’, và đơn hàng chứa các sản phẩm có biến thể.

product_id của sản phẩm cha có thể được dịch nhưng variation_id của biến thể được đặt hàng thì có thể không, và tên của sản phẩm sẽ là tên của sản phẩm cha chứ không phải của biến thể.

Giải pháp tạm thời

Chúng tôi đã xác định được nguyên nhân gốc rễ và sẽ cung cấp bản sửa lỗi trong một phiên bản phát hành sắp tới. Trong thời gian chờ đợi, vấn đề này có thể được khắc phục bằng cách chỉnh sửa tệp plugin plugins/woocommerce-multilingual/classes/Rest/Wrapper/Orders/Languages.php và thay thế toàn bộ hàm “prepare” (từ khoảng dòng 42) bằng

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

Tất cả các lỗi đã ghi nhận →