- Status
- Gelöst
- Gemeldet für
- WPML Multilingual CMS 3.3.6
Übersicht über das Problem
Das Repeater-Add-on bietet einen Repeater-Feldtyp, der dafür vorgesehen ist, andere Feldtypen zu enthalten. Damit Benutzer Inhalte innerhalb eines Repeaters duplizieren können, ist es erforderlich, ein Snippet sowie sorgfältig die Feldnamen hinzuzufügen, wie im Abschnitt „Problemumgehung“ beschrieben.
Dieses Problem besteht derzeit für die folgenden Feldtypen:
- Bild
- Datei
- Galerie
- Taxonomie
- Beitragsobjekt
- Seiten-Link
HINWEIS: Sie können das bereitgestellte Code-Snippet für alle anderen Feldtypen verwenden. Der einzige Unterschied besteht im Namen des Feldes. Das bedeutet, dass Sie dieses Snippet verwenden können, um Probleme beim Duplizieren sowohl von Repeater- als auch von regulären Feldtypen zu beheben.
Die Errata für diese Feldtypen finden Sie hier
Problemumgehung
Sie können dieses Snippet in Ihrer Datei functions.php verwenden, damit die Duplizierung ordnungsgemäß funktioniert:
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 );
Bitte beachten Sie, dass Sie die Feldnamen (‚taxonomy_field‘, ‚repeater_field_0_repeater_taxonomy_field‘ usw.) durch die Ihrer Website ersetzen sollten. Führen Sie dazu die folgenden Schritte aus.
Im obigen Beispiel haben wir Folgendes in unserer Feldgruppe:
– Ein Taxonomie-Feld
– Ein Repeater-Feld mit einem Taxonomie-Feld und einem weiteren „untergeordneten“ Repeater-Feld mit einem eigenen Taxonomie-Feld.
Das bedeutet, dass die Verschachtelung wie folgt aussieht:
Taxonomy
Repeater {
Taxonomy
Repeater Child {
Taxonomy
}
}
Das bedeutet, dass Sie Ihre Felder entsprechend Ihren Anforderungen einrichten müssen, wie wir es im Beispiel im folgenden Bild getan haben.
Wenn Sie Ihren Beitrag, Ihre Seite oder den Beitragstyp bearbeiten, für den Sie Ihre benutzerdefinierten Felder verwenden, sehen Sie diese Felder in Aktion. Das folgende Bild zeigt, wie dies in unserem Beispiel aussieht:
HINWEIS: Sie sollten die Array-Paare Key =>; Value durch entsprechende Werte ersetzen.
Array-Keys ersetzen:
Wenn Sie sich unsere Feldnamen als Keys genau ansehen, werden Sie feststellen, dass die Felder ab 0 indiziert sind.
Das bedeutet, dass Ihr erster Repeater 0 ist, der zweite 1 und so weiter. Diese Repeater-Nummern werden durch Unterstriche von anderen untergeordneten Feldtypen getrennt mit _0_, _1_, _2_…
Zum Beispiel lautet der Name des Taxonomie-Felds innerhalb unseres ersten Repeaters 'repeater_field_0_repeater_taxonomy_field', und das ist der Name, den wir in das obige Snippet-Array einfügen. Achten Sie auf drei Dinge:
- Fügen Sie innerhalb eines Arrays jedes verwendete Feld als Key ein und stellen Sie sicher, dass es einem der unten aufgeführten Typen entspricht
- Der Name des Felds ist richtig formatiert
- Der Name des Felds wird für jede Repeater-Zeile separat hinzugefügt, d. h. wenn Sie 10 Repeater-Zeilennamen haben, sieht das wie folgt aus: 'repeater_field_0_some_custom_field', 'repeater_field_1_some_custom_field', 'repeater_field_2_some_custom_field' … bis hin zu 'repeater_field_9_some_custom_field'.
Ersetzen Sie Values wie ‚some_taxonomy_name‘, ‚some_other_taxonomy_name‘ usw. entsprechend. Dies ist der Elementtyp, zu dem die ID gehört. Mögliche Typen sind post, page, attachment, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}
Weitere Informationen finden Sie in unserer Hook-Dokumentation hier.


