- Trạng thái
- Đã giải quyết
- Được báo cáo cho
- WPML Multilingual & Multicurrency for WooCommerce 5.4.2
- Đã giải quyết trong
- WooCommerce Multilingual & Multicurrency 5.4.3
- Thẻ chủ đề
- Bug
Tổng quan về lỗi
Với phiên bản WCML 4.5.2 mới nhất, bạn có thể gặp sự cố trong đó nhiều trường postmeta như “_price” được chèn vào sản phẩm biến thể đã dịch khi cập nhật.
Do đó, bạn có thể có một sản phẩm biến thể hiển thị giá không chính xác chẳng hạn – với giá trị trước khi cập nhật sản phẩm biến thể đó.
Các nhà phát triển của chúng tôi đang tiến hành khắc phục vấn đề này.
Giải pháp tạm thời
Trong wp-content/plugins/woocommerce-multilingual/inc/translation-editor/class-wcml-synchronize-variations-data.php
Thay đổi từ:
// 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;
}
}
thành
// 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;
}
}