- Stato
- Risolto
- Segnalato per
- WPML Multilingual & Multicurrency for WooCommerce 5.4.2
- Risolto in
- WooCommerce Multilingual & Multicurrency 5.4.3
- Tag dell’argomento
- Bug
Panoramica del problema
Con l’ultima versione di WCML 4.5.2, potresti riscontrare problemi in cui più campi postmeta come “_price” vengono inseriti nella variazione del prodotto tradotta durante l’aggiornamento.
Di conseguenza, potresti avere una variazione del prodotto che mostra un prezzo errato, ad esempio con il valore precedente all’aggiornamento di quella variazione.
I nostri sviluppatori stanno lavorando a una correzione per questo problema.
Soluzione alternativa
In wp-content/plugins/woocommerce-multilingual/inc/translation-editor/class-wcml-synchronize-variations-data.php
Cambia da:
// 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;
}
}
a
// 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;
}
}