WPML
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;
			}
		}

Tutti i problemi noti →