Navigation überspringen

Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.

Problem:
Der Kunde möchte ACF-Felder, die programmatisch über

acf_add_local_field_group

in einem Plugin hinzugefügt werden, übersetzen. Es gibt ein Problem mit der Übersetzung von Systemfeldern, die in der postmeta-Tabelle fehlen.

Lösung:
Wir empfehlen die Verwendung der ACF JSON-Funktionalität für die Synchronisation von Feldgruppen. Die Felder sollten nach dem

acf/init

Hook mit einer Priorität höher als 10 registriert werden. Hier ist ein Beispielcode, wie man die Felder registrieren kann:

add_action('acf/init', function(){
    $fieldsJson = @file_get_contents(__DIR__ . 'https://cdn.wpml.org/fields.json');
    if (!$fieldsJson || !function_exists('acf_add_local_field_group')) {
        return;
    }
 
    $fieldGroups = json_decode($fieldsJson, true) ?: [];
    foreach ($fieldGroups as $group) {
        acf_add_local_field_group($group);
    }
}, 20);

Nachdem ein neues Feld über die GUI erstellt und gespeichert wurde, wird eine neue JSON-Datei im Ordner erstellt, die für die Synchronisation verwendet werden kann. Weitere Informationen zur Synchronisation finden Sie in der ACF-Dokumentation unter Local JSON.

Falls diese Lösung veraltet ist oder nicht auf Ihr Problem zutrifft, empfehlen wir Ihnen, ein neues Support-Ticket zu öffnen. Wir empfehlen auch, die Seite mit bekannten Problemen unter bekannten Problemen zu überprüfen, die Version der dauerhaften Lösung zu verifizieren und zu bestätigen, dass Sie die neuesten Versionen von Themes und Plugins installiert haben. Sollten Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte im WPML-Supportforum.

Dies ist das technische Support-Forum für WPML – das mehrsprachige WordPress-Plugin.

Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.

Schlagwörter: 

Dieses Thema enthält 9 Antworten, hat 2 Stimmen.

Zuletzt aktualisiert von Marcel Vor 1 Jahr, 2 Monaten.

Assistiert von: Marcel.

Verfasser Beiträge
Februar 14, 2024 unter 2:38 pm #15302981

stephanJ-2

Q: Sagen Sie uns, was Sie versuchen zu erreichen?

Ich möchte ACF fields, die programmatisch über `acf_add_local_field_group` in einem Plugin hinzugefügt werden (d.h. sie existieren nicht als Datensätze in der posts-Tabelle), übersetzen.

Auffällig ist, dass für Übersetzungen die system fields (Felder, die mit Unterstrich beginnen) für custom_field_translations auf "0" (Don't translate) stehen - sie fehlen dann als Datensätze in der postmeta-Tabelle.

Q: Folgen Sie einer Dokumentation?

https://wpml.org/forums/topic/issue-with-acf-and-wpml-2/

Auch das Speichern des Originals hat nicht geholfen, die Datensätze für die Systemfehler (beginnend mit Unterstrich) existieren nicht in der postmeta-Tabelle für die Übersetzung.

Q: Gibt es ein ähnliches Beispiel, das wir sehen können?

Ich habe einen GitHub-Projekt angelegt für das Aufsetzen eines WordPress mit Docker incl. xdebug als Proof-of-concept:
versteckter Link

Dort habe ich ACF Pro und WPML eingerichtet und eines Seite erstellt, wo ich ein einzelnes Feld und ein Repeater-Feld ausgefüllt habe, welches ich dann mit ATE übersetzt habe. In dem übersetzten Post fehlen die Systemfelder (beginnend mit Unterstrich) von ACF.

Februar 15, 2024 unter 4:54 pm #15308649

Marcel
WPML-Unterstützer seit 02/2019

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+02:00)

Hallo,

danke für die Infos. Wir testen dies und melden uns schnellstmöglich.

Freundliche Grüße
Marcel

Februar 16, 2024 unter 9:15 am #15310549

Marcel
WPML-Unterstützer seit 02/2019

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+02:00)

Hallo,

Wir müssten die konkreten Einstellungen prüfen, da wäre es mit dem Container schwieriger zum reproduzieren. Wir können jedoch gerne eine Sandbox von uns dafür verwenden, wo das Testplugin installiert und alles reproduziert werden kann.

Bevor wir dies machen, könnten Sie bitte prüfen, ob unter ACF -> Tools die Checkbox "Scan local fields for chnages to translation preferences" aktiviert ist?

Vielen Dank!

Freundliche Grüße
Marcel

Februar 19, 2024 unter 8:40 am #15316353

stephanJ-2

Hallo Marcel,

ich habe die Übersetzung auch mit oben benannter gesetzter Checkbox durchgeführt und erhalte das gleiche Ergebnis. Ich kann es gern in der Sandbox nachstellen. Können Sie uns bitte eine solche erstellen.

Beste Grüße

Februar 19, 2024 unter 5:20 pm #15319684

Marcel
WPML-Unterstützer seit 02/2019

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+02:00)

Hallo,

danke für die Info. Ich habe hier eine Sandbox vorbereitet: versteckter Link. WPML, ACF/ACF Pro sowie Ihr Beispiel-Plugin ist bereits vorinstalliert.

Freundliche Grüße
Marcel

Februar 20, 2024 unter 12:42 pm #15322712

stephanJ-2

Hallo Marcel,

danke für das Anlegen der Sandbox.

Hier was ich gemacht habe:
- ACF > Werkzeuge: Checkbox "Scan local fields for changes to translation preferences." aktiviert
- Plugin "Test Plugin" aktiviert
- Eine Seite in der Sprache "Deutsch" mit Repeater und einem einzelnen Textfeld angelegt
- Diese Seite dann mit den ATE nach "Englisch" übersetzt

Der Post in Deutsch hat die ID 61.
Der Post für die Übersetzung hat die ID 63.

Mit folgendem SQL sollte sich nachweisen lassen, dass in der Datenbank die ACF system fields für den Repeater bei der Übersetzung fehlen:

```
SELECT * FROM `wp_postmeta` WHERE `post_id` IN(61, 63) AND meta_key LIKE '\_repeater%';
```

Können Sie bitte mal schauen und bestätigen, dass dies auch in der Sandbox der Fall ist.

Best Grüße
Steffen

Februar 20, 2024 unter 5:55 pm #15324313

Marcel
WPML-Unterstützer seit 02/2019

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+02:00)

Hallo Steffen,

vielen Dank! Ich konnte es via SQL nachstellen, es wird nur die ID 61 gefunden. Wir prüfen dies und melden uns schnellstmöglich.

Freundliche Grüße
Marcel

Februar 22, 2024 unter 5:30 pm #15335202

Marcel
WPML-Unterstützer seit 02/2019

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+02:00)

Hallo Steffen,

Es scheint, dass diese Funktionalität fehlt, unsere Devs prüfen dies bereits. Vorerst können Sie die JSON-Funktion von ACF versteckter Link verwenden.

Eine weitere Sache, auf die ich hinweisen möchte: Selbst wenn das Problem in Zukunft behoben wird, müssen Sie den Code anpassen, um die Felder über PHP zu registrieren.
ACF Multilingual wird bei "acf/init" geladen, also stellen Sie sicher, dass Sie das Feld nach diesem Hook registrieren. Und um sicherzustellen, dass es nach ACF Multilingual geladen wird, setzen Sie die Priorität daher auf 20 (zumindest höher als 10).

Ein Beispiel:

add_action('acf/init', function(){
    $fieldsJson = @file_get_contents(__DIR__ . 'https://cdn.wpml.org/fields.json');
    if (!$fieldsJson || !function_exists('acf_add_local_field_group')) {
        return;
    }

    $fieldGroups = json_decode($fieldsJson, true) ?: [];
    foreach ($fieldGroups as $group) {
        acf_add_local_field_group($group);
    }
}, 20);

Freundliche Grüße
Marcel

Februar 27, 2024 unter 9:19 am #15347905

stephanJ-2

Hallo Marcel,

danke für deine Nachricht. Ich habe das Test-Plugin, wie vorgeschlagen angepasst und auch ins GitHub-Repository gepushed. Ich habe zudem auch den Pfad, wo die ACF-Felder speichert werden, definiert ('acf/settings/save_json'). Das Verhalten hat sich leider nicht verändert. Gibt es noch weiteres anzupassen oder habe ich irgendwo einen Fehler?

add_filter('acf/settings/save_json', function () {
    return __DIR__;
});

add_action('acf/init', function() {
    $fieldsJson = @file_get_contents(__DIR__ . 'https://cdn.wpml.org/fields.json');
    if (!$fieldsJson || !function_exists('acf_add_local_field_group')) {
        return;
    }

    $fieldGroups = json_decode($fieldsJson, true) ?: [];
    foreach ($fieldGroups as $group) {
        acf_add_local_field_group($group);
    }

    $optionsJson = @file_get_contents(__DIR__ . 'https://cdn.wpml.org/options.json');
    $optionsPages = json_decode($optionsJson, true) ?: [];
    foreach ($optionsPages as $group) {
        acf_add_local_field_group($group);
    }

    add_action('acf/init', function() {
        acf_add_options_page([
            'page_title' => 'Option Page',
            'menu_slug' => 'option-page',
            'position' => '',
            'redirect' => false,
        ]);
    });
}, 20);

Ich bitte um weiteren Support.

Best Grüße
Steffen

Februar 28, 2024 unter 10:43 am #15353152

Marcel
WPML-Unterstützer seit 02/2019

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+02:00)

Hallo,

so funktioniert es leider nicht. Sie müssten auch den Ladepfad wie folgt hinzufügen:

function my_acf_json_load_point( $paths ) {
    // Remove the original path (optional).
    unset($paths[0]);

    $paths[] = __DIR__;
    return $paths;
}
add_filter( 'acf/settings/load_json', 'my_acf_json_load_point' );

Diesen Code benötigen Sie hierfür nicht, Sie können diesen entfernen:

    $fieldGroups = json_decode($fieldsJson, true) ?: [];
    foreach ($fieldGroups as $group) {
        acf_add_local_field_group($group);
    }
 
    $optionsJson = @file_get_contents(__DIR__ . 'https://cdn.wpml.org/options.json');
    $optionsPages = json_decode($optionsJson, true) ?: [];
    foreach ($optionsPages as $group) {
        acf_add_local_field_group($group);
    }

Erstellen Sie nun ein neues Feld über die GUI und speichern Sie. Beim Speichern wird eine neue json-Datei im Ordner erstellt. Diese json-Datei ist für jede Feldgruppe eindeutig. Bitte prüfen Sie den Abschnitt über die Synchronisationsänderungen hier versteckter Link.

Items stored in JSON will be available for sync when either the items do not exist in the database, or when the JSON version contains a higher “modified” value (within the JSON array) than the post modified date recorded in the database.

Für weitere Details kontaktieren Sie hierfür am besten direkt den ACF Support.

Viele Grüße
Marcel

image2 (1).png