Resolved
Reported for: WooCommerce Multilingual & Multicurrency 5.4.2
Resolved in: WooCommerce Multilingual & Multicurrency 5.4.3
Overview of the issue
With the latest WCML 4.5.2, you might encounter issues where multiple postmeta fields like “_price” are inserted in the translated variation product upon update.
As a result, you might have a variation product which shows improper price for example – with the value prior to the update of that variation product.
Our developers are working on a fix for this.
Workaround
In wp-content/plugins/woocommerce-multilingual/inc/translation-editor/class-wcml-synchronize-variations-data.php
Change from:
// 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; } }
to
// 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; } }