[Gelöst] Advanced Custom Fields werden nicht übersetzt
Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.
Problem: Sie nutzen ACF Felder (Checkboxen) für Beiträge, die Sie manuell im Quellcode übersetzen. Seit der Umstellung auf automatische Übersetzung werden einige ACF Felder nicht mehr im Frontend angezeigt. Die Feldgruppen sind in den WPML-Einstellungen auf 'nicht übersetzbar' gesetzt, und die Felder auf 'kopieren'.
Solution: Stellen Sie sicher, dass die Feldgruppen immer auf 'Nicht übersetzbar' stehen. Für Checkbox-Felder sollte, abhängig vom verwendeten Editor, 'Kopieren' oder 'Einmal kopieren' gewählt werden. Die 'Choices' der Felder sollten sich mit der WPML String-Übersetzung übersetzen lassen. Verwenden Sie Wert-Schlüssel statt sichtbarer Labels in Ihrem ACF-Feld, z.B. 'haircut : Haare schneiden' und 'blowdry : Föhnen'. Passen Sie Ihren PHP-Code entsprechend an, um die Werte abzufragen:
Falls diese Lösung für Sie nicht relevant ist, weil sie veraltet ist oder nicht auf Ihren Fall zutrifft, empfehlen wir Ihnen, ein neues Support-Ticket zu öffnen. Wir empfehlen auch, die bekannten Probleme 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.
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.
Hintergrund des Themas:
Ich nutze schon länger ACF Felder (Checkboxen) bei Beiträgen, welche ich manuell im Quellcode übersetze. Das hat immer gut funktioniert, aber seit kurzem, eventuell seit der Umstellung auf automatische Übersetzung, werden nicht mehr alle ACF Felder in der Übersetzung im Frontend angezeigt. Die Feldgruppen (acf-field-group) sind in den WPML-Einstellungen auf 'nicht übersetzbar' gestellt. Die Feldgruppe in ACF steht auf 'Experte' und das Feld auf 'kopieren'.
Die Symptome:
In der String-Übersetzung scheinen alle Felder übersetzt zu sein. Im Übersetzungsmanagement ist die komplette Gruppe (Field Group Labels 246) allerdings als 'nicht übersetzt' markiert.
Fragen:
Muss ich die Feldgruppe im Übersetzungsmanagement auch übersetzen?
Was hat sich plötzlich geändert, dass die ACF Felder nicht mehr angezeigt werden?
Die Feldgruppen sollten immer auf "Nicht übersetzbar" stehen.
Cas "Checkbox"-Feld sollte bei Verwendung des WPML Übersetzungseditor aus "Kopieren" stehen und bei Verwendung des WordPress-Editor auf "Einmal kopieren".
Die "Choices" des Feldes sollten sich mit der WPML String-Übersetzung übersetzen lassen.
Wird der Inhalt mit dem WPML Übersetzungseditor oder dem WordPress-Editor übersetzt?
In meinem PHP-Template frage ich die Felder per „if/else if“ ab, um sie zu übersetzen und als Link auszugeben. Die Links (<a>) habe ich in dem folgenden Beispiel entfernt, da das hier im Forum nicht funktioniert:
Da die ACF-Felder in der String-Übersetzung anscheinend automatisch übersetzt worden sind, greift meine Abfrage (z.B. $service == 'Haare schneiden') nicht mehr und ich müsste entweder meinen Code ($service == 'Haircut') oder die String-Übersetzung anpassen.
Danke für deine Hilfe. Falls du noch eine Idee hast, wie ich das besser lösen kann, sag gerne Bescheid.
Lösung (empfohlen): Verwende stattdessen einen Wert-Schlüssel statt der sichtbaren Labels.
Wenn du mit einer Mehrfachauswahlfeld (Select, Checkbox, etc.) arbeitest, nutze lieber die Möglichkeit der "Wertangabe".
Beispiel:
In ACF: Lege Dein Feld Choices wie folgt fest:
Haare schneiden : haircut
Also:
haircut : Haare schneiden
blowdry : Föhnen
Das Funktioniert auf diese Weise allerdings nur, wenn nur zwei Sprachen aktiv sind.
Soll bedeuten, der Wert bleibt 'haircut' oder 'blowdry' on beiden Sprachen und die übersetzt nur das Label, das im Frontend angezeigt wird.
Grundsätzlich werden diese Labels aber mit dem WPML Übersetzungseditor oder eben über WPML > String Translation übersetzt und sie sollten eigentlich nicht konditionell im PHP Code übersetzt werden.
Wenn du unbedingt bei deinem Code bleiben willst, musst du einen Weg finden, das Originale (nicht übersetzte) Feld auszulesen.
Dazu könntest du z. B. temporär auf die Standardsprache umschalten, das Feld lesen, dann zurückwechseln. Das ist aber eher ein Hack und kostet Performance: