WPML
สถานะ
แก้ไขแล้ว
รายงานสำหรับ
WPML Multilingual & Multicurrency for WooCommerce 5.4.2
แก้ไขใน
WooCommerce Multilingual & Multicurrency 5.4.3
แท็กหัวข้อ
Bug

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

ใน WCML 4.5.2 เวอร์ชันล่าสุด คุณอาจพบปัญหาที่มีฟิลด์ postmeta หลายรายการ เช่น “_price” ถูกแทรกลงในตัวเลือกสินค้าที่แปลแล้วเมื่อทำการอัปเดต

ส่งผลให้ตัวเลือกสินค้าดังกล่าวอาจแสดงราคาที่ไม่ถูกต้อง ตัวอย่างเช่น แสดงมูลค่าก่อนการอัปเดตตัวเลือกสินค้านั้น

นักพัฒนาของเรากำลังดำเนินการแก้ไขปัญหานี้

วิธีแก้ปัญหาชั่วคราว

ใน wp-content/plugins/woocommerce-multilingual/inc/translation-editor/class-wcml-synchronize-variations-data.php
เปลี่ยนจาก:

		// Loop over the delated fields to clasify them by the field status:
		// - if the meta key exists for its variation ID, it is set to update.
		// - otherwise, it is set to insert.
		$delayedFieldsActions = [];
		foreach ( $delayedFields as $delayedFieldData ) {
			$fieldPostId                                         = $delayedFieldData['post_id'];
			$fieldMetaKey                                        = $delayedFieldData['meta_key'];
			$fieldMetaValue                                      = $delayedFieldData['meta_value'];
			$delayedFieldsActions[ $fieldMetaKey ]['meta_value'] = $fieldMetaValue;
			$metaDataByVariationId                               = Obj::propOr( [], $fieldPostId, $metaDataByVariationId );
			if ( in_array( $fieldMetaKey, $metaDataByVariationId, true ) ) {
				$delayedFieldsActions[ $fieldMetaKey ]['update'][ $fieldMetaValue ][ $fieldPostId ] = $fieldPostId;
			} else {
				$delayedFieldsActions[ $fieldMetaKey ]['insert'][ $fieldPostId ] = $fieldMetaValue;
			}
		}

เป็น

		// Loop over the delated fields to clasify them by the field status:
		// - if the meta key exists for its variation ID, it is set to update.
		// - otherwise, it is set to insert.
		$delayedFieldsActions = [];
		foreach ( $delayedFields as $delayedFieldData ) {
			$fieldPostId                                         = $delayedFieldData['post_id'];
			$fieldMetaKey                                        = $delayedFieldData['meta_key'];
			$fieldMetaValue                                      = $delayedFieldData['meta_value'];
			$delayedFieldsActions[ $fieldMetaKey ]['meta_value'] = $fieldMetaValue;
			$metaDataByPostId                               = Obj::propOr( [], $fieldPostId, $metaDataByVariationId );
			if ( in_array( $fieldMetaKey, $metaDataByPostId, true ) ) {
				$delayedFieldsActions[ $fieldMetaKey ]['update'][ $fieldMetaValue ][ $fieldPostId ] = $fieldPostId;
			} else {
				$delayedFieldsActions[ $fieldMetaKey ]['insert'][ $fieldPostId ] = $fieldMetaValue;
			}
		}

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