Zum Inhalt springen Zur Seitenleiste springen

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.

Sun Mon Tue Wed Thu Fri Sat
- - 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00
- - - - - - -

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

Schlagwörter: ,

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

Zuletzt aktualisiert von Andreas W. Vor 1 Tag, 20 Stunden.

Assistiert von: Andreas W..

Autor Beiträge
August 2, 2025 um 11:07 am #17289941

buenyaminD

Hintergrund des Themas:
Ich betreibe eine zweisprachige WordPress-Website (Deutsch & Englisch) mit WPML in einer Multidomain-Konfiguration (.de und .com). Ich benötige Unterstützung bei der Integration des Plugins 'Brevo for WooCommerce' (ehemals Sendinblue). Nutzer können beim WooCommerce-Checkout den Newsletter abonnieren, und die Eintragungen sollen sprachabhängig unterschiedlichen Listen in Brevo zugewiesen werden: DE-Newsletter-Liste → ID: 2, EN-Newsletter-Liste → ID: 9. Ich habe versucht, über den Filter brevo_wc_list_id mit WPMLs wpml_current_language zu arbeiten, jedoch wird auch beim Checkout auf der englischen .com-Seite weiterhin nur die deutsche Liste (ID 2) verwendet. Hier ist der Code, den ich verwendet habe: add_filter('brevo_wc_list_id', function ($list_id) { if (function_exists('apply_filters')) { $lang = apply_filters('wpml_current_language', NULL); switch ($lang) { case 'de': return 2; case 'en': return 9; default: return $list_id; } } return $list_id; });

Die Symptome:
Beim Checkout auf der englischen .com-Seite wird weiterhin nur die deutsche Liste (ID 2) verwendet, obwohl die Eintragungen sprachabhängig unterschiedlichen Listen zugewiesen werden sollen.

Fragen:
Habt ihr eine Empfehlung, wie ich an dieser Stelle zuverlässig die aktuelle Sprache im Checkout-Kontext auslesen kann?
Gibt es eine alternative Möglichkeit, wie ich das WPML-kompatibel aufsetzen kann?

August 5, 2025 um 12:04 pm #17296341

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

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

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

Hallo,

Verstehe ich richtig, dass diese Listen außerhalb von WordPress, also auf dem Portal von Brevo, verwaltet werden?

Ich kann dazu gerne eine WPML Test Site anbieten, auf der man das Problem replizieren kann. Wenn die Listen allerdings in der WordPress-Datenbank nicht exitiestieren, wird sich das alleine per WPML Hooks nicht lösen lassen.

Mit freundlichen Grüßen
Andreas

August 8, 2025 um 10:50 am #17305112

buenyaminD

Hallo Andreas,

ja, genau – die Listen werden extern im Brevo-Portal verwaltet und sind nicht in der WordPress-Datenbank gespeichert. Das Brevo-for-WooCommerce-Plugin übergibt beim Checkout nur die List-ID an die Brevo-API.

Mein Ziel ist es, dass diese List-ID je nach aktueller Sprache (.de oder .com) dynamisch gesetzt wird, bevor der API-Request an Brevo rausgeht, sodass Nutzer der .com Seite auch in die Englische Liste eingetragen werden.

August 8, 2025 um 11:05 am #17305181

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

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

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

Die Kompatilbität wird in diesem Fall im Code von Brevo gewährleistet und wir können in dem Fall nur beratend hilfreich sein.

Ich werde versuchen, ob ich das Problem auf einer Test Site mit einem kostenlosen Brevo-Konto replizieren kann und versuchen eine Lösung anzubieten. Ob diese Lösung dann aber auch von Brevo integriert wird, kann ich nicht garantieren. Du solltest dazu besser den Hersteller Sendinblue direkt konsultieren.

August 8, 2025 um 11:35 am #17305256

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

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

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

Die Formulare werden in der WordPress-Datenbank gespeichert, wenn sie in WordPress angelegt wurden.

Sie werden dann per Shortcode in den Seiten aufgerufen.

Beispiel:
[sibwp_form id=1]

Du musst in dem Fall die ID im Shortcode nicht selbst anpassen. Es scheint als verwendet Brevo hier bereits Code, um mit WPML kompatible zu sein und der gleiche Shortcode kann in beiden Sprachen angewendet werden.

Die Kontakt-Liste wird in jedem Form in den Formular-Optionen in WordPress festgelegt.

Kannst Du das bitte einmal auf deiner Live-Site versuchen?

1) Gehe auf Brevo > Forms
2) Klicke auf das Übersetzungssymbol des Formular, um es in einer Zweitsprache zu editeren.
3) Unter Sign up process > Linked List wähle bitte die gewünschte Liste aus.

Bei meinem Test löste sich damit das Problem und der neue Kontakt landete auf der erwarteten Liste.

August 13, 2025 um 9:25 pm #17319263

buenyaminD

Hallo Andreas,

danke für deine Rückmeldung.

In meinem Fall geht es nicht um die Brevo-Formulare, sondern ausschließlich um die Newsletter-Checkbox beim WooCommerce-Checkout, die über das Plugin „Brevo for WooCommerce“ eingebunden wird.
Ich nutze also nicht den Formular-Editor von Brevo innerhalb von WordPress, sondern nur die Integration im Checkout.

Mein Ziel:
Kontakte, die beim Checkout das Newsletter-Häkchen setzen, sollen abhängig von der Sprache in verschiedene Brevo-Listen eingetragen werden:

Deutsch: Liste-ID 188
Englisch: Liste-ID 6978

Die Listen werden im Brevo-Konto verwaltet und nicht lokal in WordPress angelegt.
Das Plugin bietet den Filter-Hook brevo_wc_list_id, über den ich versuche, anhand der aktuellen Sprache (wpml_current_language, ICL_LANGUAGE_CODE oder per Domain-Check) die korrekte Liste zu setzen.

Mein aktueller Versuch:

if ( ! function_exists('my_brevo_map_list_by_checkout_page') ) {
function my_brevo_map_list_by_checkout_page( $current_list_id ) {
// Deine Zuordnung:
$DE_CHECKOUT_ID = 188;
$EN_CHECKOUT_ID = 6978;
$DE_LIST_ID = 2;
$EN_LIST_ID = 9;

// Aktuelle Seite ermitteln
$page_id = 0;
global $post;
if ( $post && isset($post->ID) ) {
$page_id = (int) $post->ID;
} elseif ( function_exists('get_the_ID') ) {
$maybe = get_the_ID();
if ( $maybe ) {
$page_id = (int) $maybe;
}
}

// Auf Checkout-Ajax/REST kann $post leer sein – daher zusätzlich nach Referer schauen
if ( ! $page_id && ! empty($_SERVER['HTTP_REFERER']) ) {
$ref = esc_url_raw( $_SERVER['HTTP_REFERER'] );
// Ganz einfacher Check auf bekannte IDs in der URL (nur als Fallback)
if ( strpos($ref, 'post=' . $DE_CHECKOUT_ID) !== false || strpos($ref, '/checkout/') !== false ) {
$page_id = $DE_CHECKOUT_ID;
} elseif ( strpos($ref, 'post=' . $EN_CHECKOUT_ID) !== false || strpos($ref, '/en/checkout/') !== false ) {
$page_id = $EN_CHECKOUT_ID;
}
}

// Zuordnung
if ( $page_id === $DE_CHECKOUT_ID ) {
return $DE_LIST_ID;
}
if ( $page_id === $EN_CHECKOUT_ID ) {
return $EN_LIST_ID;
}

// Letzter Fallback: WPML Sprachcode prüfen, falls vorhanden
if ( defined('ICL_LANGUAGE_CODE') ) {
if ( ICL_LANGUAGE_CODE === 'de' ) {
return $DE_LIST_ID;
} elseif ( ICL_LANGUAGE_CODE === 'en' ) {
return $EN_LIST_ID;
}
}

// Nichts erkannt -> Originalwert zurückgeben
return $current_list_id;
}
}

/**
* PRIMÄR: Brevo WooCommerce Hook – einzelne Listen-ID überschreiben.
* Manche Plugin-Versionen übergeben 1 oder 2 Parameter – daher beide Varianten deklarieren.
*/
add_filter( 'brevo_wc_list_id', function( $list_id ) {
return my_brevo_map_list_by_checkout_page( $list_id );
}, 10, 1 );

add_filter( 'brevo_wc_list_id', function( $list_id, $context ) {
return my_brevo_map_list_by_checkout_page( $list_id );
}, 10, 2 );

/**
* FALLBACK: Allgemeiner Brevo-Hook – Array der Listen überschreiben,
* falls das Plugin nicht 'brevo_wc_list_id' nutzt.
*/
add_filter( 'brevo_user_lists', function( $list_ids, $user_email = '' ) {
// Falls bereits eine Liste gesetzt wurde, unverändert lassen.
$current = is_array($list_ids) && ! empty($list_ids) ? (int) reset($list_ids) : 0;
$mapped = my_brevo_map_list_by_checkout_page( $current );

// Nur überschreiben, wenn eine valide Mapping-ID zurückkam.
if ( $mapped && $mapped !== $current ) {
return array( (int) $mapped );
}
return $list_ids;
}, 10, 2 );

Leider aber ohne Erfolg... Was kann ich tun?

August 14, 2025 um 5:22 am #17319611

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

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

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

Vielen Dank für den Hinweis!

Ich werde weiterhin versuchen das Problem zu replizieren und mich daraufhin zurückmelden.

August 14, 2025 um 3:48 pm #17321583

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

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

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

Wie wird auf deiner Website das Formular im Checkout eingebunden?

Ich habe es mit einem Gutenberg Shortcode Block gestestet und es funktioniert bei meinem Test wie erwartet.

August 15, 2025 um 9:17 am #17322926

buenyaminD

Hallo Andreas,

das Formular wird über das Plugin „Brevo for WooCommerce“ angebunden. Die Einstellungen hierfür werden über das Brevo Backend vorgenommen (siehe Anhang). Hilft es Ihnen, wenn ich Ihnen die Brevo Zugangsdaten zur Verfügung stelle?

brevo backend anbindung.jpg
August 16, 2025 um 1:36 am #17324326

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

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

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

In dem Fall wird die Option über die Brevo-Plattform gesteuert und vermutlich kann WPML deshalb nicht wissen, dass diese Option aktiv ist.

Wo genau befindet sich diese Option in Brevo? Bitte erteile mir eine exakte Anleitung. Ich habe bereits ein Konto erstellt.

Wurde dazu ein Formular in der Brevo-Plattform angelegt?

Du wirst die Strings der Brevo-Plattform zudem nicht mit WPML String Translation übersetzen können, wenn ein Formular nicht in WordPress angelegt wurde.

Empfohlender Workflow:
Erstelle das Formular in WordPress, nutze die UI von Brevo zum Ertsellen der Übersetzung und binde das Formular per Shortcode in den Checkout ein. Stelle auf dem übersetzen Formular sicher, dass die korrekte Liste gesetzt ist.

Das funktionierte bei meinem Test.

August 16, 2025 um 11:04 am #17324781

buenyaminD

Vielen Dank! Hier die Exakte Anleitung:

1. Im Brevo Dashboard unter Integrationen das Woocommerce Plugin integrieren
2. Über "meine Integrationen" die Einstellungen Bearbeiten
3. Über "Kontakt Synchronisierung" das Opt in Feld erstellen

Funktioniert es auch mit diesem Workflow?

3.jpg
2.jpg
1.jpg
August 16, 2025 um 4:15 pm #17324915

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

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

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

Das ist leider eine Limitierung des Brevo Dashboards, da man in diesen Optionen unter "Synchronisierung durchführen mit:" leider nur eine Liste auswählen.

Mit WPML könnte man das nur steuern, wenn die Listen in WordPress angelegt wären.

Ich würde empfehlen den von mir zuvor genannten Workaround anzuwenden oder den Brevo Support dazu zu konsultieren.