- 상태
- 해결됨
- 보고된 제품
- WPML Multilingual & Multicurrency for WooCommerce 5.4.2
- 해결된 버전
- WooCommerce Multilingual & Multicurrency 5.4.3
- 주제 태그
- Bug
문제 개요
최신 WCML 4.5.2에서는 업데이트 시 번역된 옵션 상품에 “_price”와 같은 여러 postmeta 필드가 삽입되는 문제가 발생할 수 있습니다.
그 결과, 예를 들어 해당 옵션 상품을 업데이트하기 전의 값이 적용되어 잘못된 가격이 표시될 수 있습니다.
개발팀에서 이 문제에 대한 수정 작업을 진행 중입니다.
임시 해결 방법
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;
}
}