WPML
Stato
Risolto
Segnalato per
WPML Multilingual CMS 3.3.6

Panoramica del problema

Il componente aggiuntivo Repeater fornisce un tipo di campo repeater progettato per contenere altri tipi di campo. Per consentire all’utente di duplicare i contenuti all’interno di un repeater, è necessario aggiungere uno snippet e aggiungere con attenzione i nomi dei campi come descritto nella sezione Soluzione alternativa.

Questo problema si presenta attualmente per i seguenti tipi di campo:

- immagine

- file

- galleria

- tassonomia

- oggetto articolo

- link alla pagina

NOTA: puoi usare lo snippet di codice fornito per tutti gli altri tipi di campo. L’unica differenza è nel nome del campo. Questo significa che puoi usare questo snippet per risolvere i problemi di duplicazione sia dei tipi di campo repeater che di quelli normali.

Puoi trovare l’errata per questi tipi di campo qui

Soluzione alternativa

Puoi usare questo snippet nel tuo file functions.php, in modo che la duplicazione funzioni correttamente:

function wpml_fix_acf_duplication( $value_to_filter, $target_language, $meta_data ) {
  // Field names should be placed into following array.
  $fields = array(
     'taxonomy_field' => 'some_taxonomy_name',
     'repeater_field_0_repeater_taxonomy_field' => 'some_other_taxonomy_name',
     'repeater_field_1_repeater_taxonomy_field' => 'some_other_taxonomy_name',
     'repeater_field_0_repeater_child_0_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
     'repeater_field_0_repeater_child_1_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
     'repeater_field_1_repeater_child_0_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
     'repeater_field_1_repeater_child_1_repeater_child_taxonomy_field' => 'some_other_taxonomy_name'
  );


  if ( array_key_exists( $meta_data['key'], $fields ) ) {
		$value = maybe_unserialize( $value_to_filter );

		if ( is_array( $value ) ) {
			// If custom field value contain array of IDs to translate, usually used for gallery and taxonomy field types.
			$translated_ids = array();

			foreach ( $value as $v ) {
				$translated_ids[] = apply_filters( 'wpml_object_id', $v, $fields[ $meta_data['key'] ], true, $target_language );
			}

			return maybe_serialize( $translated_ids );
		} else {
			// If custom field value contain single ID to translate, usually used for image and file field types.
			$translated_id = apply_filters( 'wpml_object_id', $value, $fields[ $meta_data['key'] ], true, $target_language );

			return $translated_id;
		}
	}

	return $value_to_filter;
}
add_filter( 'wpml_duplicate_generic_string', 'wpml_fix_acf_duplication', 999, 3 );

Tieni presente che devi sostituire i nomi dei campi (‘taxonomy_field’, ‘repeater_field_0_repeater_taxonomy_field’, ecc.) con quelli del tuo sito. Segui questi passaggi per farlo.

Nell’esempio precedente, abbiamo quanto segue nel nostro gruppo di campi:

– Un campo tassonomia

– Un campo repeater con un campo tassonomia e un altro campo repeater “figlio” con il proprio campo tassonomia.

Questo significa che l’annidamento si presenta così:

Taxonomy
Repeater {
         Taxonomy
         Repeater Child { 
                        Taxonomy 
         }
}

Questo significa che devi impostare i tuoi campi in base alle tue esigenze, come abbiamo fatto nell’esempio mostrato nell’immagine seguente.

image04

Quando modifichi il tuo articolo, la tua pagina o qualsiasi tipo di post tu stia utilizzando con i tuoi campi personalizzati, vedrai questi campi in azione. L’immagine seguente mostra come appare nel nostro esempio:

image03

NOTA: Devi sostituire le coppie key =>; value dell’array con i valori corretti.

Sostituisci le chiavi dell’array:

Se guardi attentamente i nomi dei nostri campi come chiavi, noterai che i campi sono indicizzati a partire da 0.

Ciò significa che il tuo primo repeater è 0, il secondo è 1 e così via. Questi numeri del repeater sono separati da trattini bassi dagli altri tipi di campi figlio con _0_, _1_, _2_

Ad esempio, il nome del campo tassonomia all’interno del nostro primo repeater è 'repeater_field_0_repeater_taxonomy_field', e questo è il nome che inseriremo nell’array dello snippet qui sopra. Assicurati di concentrarti su tre cose:


  1. All’interno di un array, come chiavi, inserisci ogni campo che stai utilizzando e assicurati che sia di uno dei tipi elencati di seguito

  2. Il nome del campo è formattato correttamente

  3. Il nome del campo viene aggiunto per ogni riga del repeater separatamente, cioè se hai 10 nomi di righe del repeater, sarà come segue: 'repeater_field_0_some_custom_field', 'repeater_field_1_some_custom_field', 'repeater_field_2_some_custom_field' … fino ad arrivare a 'repeater_field_9_some_custom_field'.
Inoltre, puoi trovare tutti i nomi dei campi presenti nella “Configurazione del contenuto multilingue” se guardi sotto i tuoi campi di Advanced Custom Fields e l’editor WYSIWYG dopo aver salvato il tuo articolo, come mostrato nell’immagine seguente.

image05

Sostituisci i valori come: ‘some_taxonomy_name’, ‘some_other_taxonomy_name’ ecc. di conseguenza. Questo è il tipo di elemento a cui appartiene l’ID. Può essere post, page, attachment, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}

Per maggiori informazioni, consulta la nostra documentazione sugli hook qui.

Tutti i problemi noti →