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