- Statut
- Résolu
- Signalé pour
- WPML Multilingual CMS 3.3.6
Aperçu de l’anomalie
Le module complémentaire Repeater fournit un type de champ répéteur conçu pour contenir d’autres types de champs. Pour que l’utilisateur puisse dupliquer du contenu dans un répéteur, il est nécessaire d’ajouter un extrait de code et d’ajouter soigneusement les noms de champs comme décrit dans la section Solution de contournement.
Ce problème existe actuellement pour les types de champs suivants :
- image
- fichier
- galerie
- taxonomie
- objet d’article
- lien de page
REMARQUE : Vous pouvez utiliser l’extrait de code fourni pour tous les autres types de champs. La seule différence réside dans le nom du champ. Cela signifie que vous pouvez utiliser cet extrait de code pour résoudre les problèmes de duplication des types de champs répéteurs et réguliers.
Vous pouvez trouver les errata pour ces types de champs ici
Solution de contournement
Vous pouvez utiliser cet extrait de code dans votre fichier functions.php pour que la duplication fonctionne correctement :
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 );
Veuillez noter que vous devez remplacer les noms de champs (‘taxonomy_field’, ‘repeater_field_0_repeater_taxonomy_field’, etc.) par ceux de votre site. Suivez les étapes ci-dessous pour ce faire.
Dans l’exemple ci-dessus, nous avons les éléments suivants dans notre groupe de champs :
– Un champ de taxonomie
– Un champ répéteur avec un champ de taxonomie et un autre champ répéteur « enfant » avec son propre champ de taxonomie.
Cela signifie que l’imbrication ressemble à ceci :
Taxonomy
Repeater {
Taxonomy
Repeater Child {
Taxonomy
}
}
Cela signifie que vous devez configurer vos champs en fonction de vos besoins, comme nous l’avons fait dans l’exemple illustré par l’image suivante.
Lorsque vous modifiez votre article, votre page ou tout autre type de publication avec lequel vous utilisez vos champs personnalisés, vous verrez ces champs en action. L’image suivante montre à quoi cela ressemble dans notre exemple :
REMARQUE : Vous devez remplacer les paires clé =>; valeur du tableau par les valeurs appropriées.
Remplacer les clés du tableau :
Si vous regardez attentivement nos noms de champs en tant que clés, vous remarquerez que les champs sont indexés à partir de 0.
Cela signifie que votre premier répéteur est 0, le deuxième est 1 et ainsi de suite. Ces numéros de répéteur sont séparés des autres types de champs enfants par des traits de soulignement avec _0_, _1_, _2_…
Par exemple, le nom du champ de taxonomie dans notre premier répéteur est 'repeater_field_0_repeater_taxonomy_field', et c’est le nom que nous mettrons dans le tableau de l’extrait de code ci-dessus. Assurez-vous de vous concentrer sur trois choses :
- Dans un tableau, en tant que clés, placez chaque champ que vous utilisez et assurez-vous qu’il correspond à l’un des types énumérés ci-dessous
- Le nom du champ est correctement formaté
- Le nom du champ est ajouté pour chaque ligne de répéteur séparément, c’est-à-dire que si vous avez 10 noms de lignes de répéteur, ce sera comme suit : 'repeater_field_0_some_custom_field', 'repeater_field_1_some_custom_field', 'repeater_field_2_some_custom_field' … jusqu’à 'repeater_field_9_some_custom_field'.
Remplacez les valeurs telles que : ‘some_taxonomy_name’, ‘some_other_taxonomy_name’, etc. en conséquence. Il s’agit du type d’élément auquel l’ID appartient. Il peut s’agir de post, page, attachment, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}
Pour en savoir plus, veuillez consulter la documentation de notre hook ici.


