Navigation überspringen

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.

Dieses Thema enthält 3 Antworten, hat 0 Stimmen.

Zuletzt aktualisiert von Andreas W. Vor 1 Woche.

Assistiert von: Andreas W..

Autor Beiträge
Juni 17, 2025 um 7:08 am #17140807

davidS-113

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?

Juni 17, 2025 um 2:20 pm #17142854

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Hallo,

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?

Hast Du bereits versucht den Cache zu leeren?

Mit freundlichen Grüßen
Andreas

Juni 22, 2025 um 9:54 am #17156750

davidS-113

Hallo Andreas,

ich habe den Fehler gefunden!

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:

$services = get_field('service');
foreach( $services as $service ):
if ( defined( 'ICL_LANGUAGE_CODE' ) && 'de' == ICL_LANGUAGE_CODE ) {

}
else if ( defined( 'ICL_LANGUAGE_CODE' ) && 'en' == ICL_LANGUAGE_CODE ) {
if ( $service == 'Haare schneiden' ) { echo 'Haircut'; }
else if ( $service == 'Föhnen' ) { echo 'Blow dry'; }
}

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.

Viele Grüße,
David

Juni 24, 2025 um 8:44 am #17163641

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Hallo David,

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

Dann kannst du im Code sicher so abfragen:

foreach ( $services as $service ) {
    if ( $service == 'haircut' ) {
        echo (ICL_LANGUAGE_CODE == 'de') ? 'Haare schneiden' : 'Haircut';
    }
    elseif ( $service == 'blowdry' ) {
        echo (ICL_LANGUAGE_CODE == 'de') ? 'Föhnen' : 'Blow dry';
    }
}

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.

Mehr zum Thema:
https://wpml.org/documentation/related-projects/translate-sites-built-with-acf/translating-acf-field-labels-with-wpml/

Du kannnst allerdings Folgendes in der wp-config.oho hinterlegen, damit die Choices bei neuen Jobs nicht mehr automatisch übersetzt werden:

define( 'ACFML_EXCLUDE_FIELD_GROUP_STRINGS_IN_POST_JOBS', false );

Mehr dazu hier:
https://wpml.org/documentation/related-projects/translate-sites-built-with-acf/acf-multilingual-acfml-constants-and-hooks-reference/

---

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:

$current_lang = apply_filters( 'wpml_current_language', null );
$default_lang = apply_filters( 'wpml_default_language', null );

do_action( 'wpml_switch_language', $default_lang );
$services_original = get_field('service', get_the_ID());
do_action( 'wpml_switch_language', $current_lang );

// Jetzt kannst du auf $services_original zugreifen

Mit freundlichen Grüßen
Andreas