MailPoet multilingual mit Polylang

Wordpress Newsletter Plugin mehrsprachig mit Filter-Hooks

Registrierungsbestätigung im WordPress Plugin MailPoet3 mehrsprachig

Als Registrierungsbestätigungsemail für Double-Opt-in bei MailPoet3 kann nur ein Betreff, ein Inhalt und nur eine Bestätigungsseite ausgewählt werden. D.h. wenn man die Registrierungsemail und Bestätigungsseite in mehreren Sprachen benötigt, ist das so direkt nicht möglich. Deshalb habe ich mir mit einem Plugin und zwei kleinen Änderungen am MailPoet-Plugin eine Lösung mit Filter-Hooks gebastelt. Benötigt wird außerdem die kostenlose Version von Polylang .

Folgendes ist zu tun:

1. Registrierungsbestätigung multilinugal eingeben

Bei MailPoet3 können für eine Double-Opt-in-Registrierungsbestätigung der Text für den E-Mail-Betreff, E-Mail-Inhalt und eine Bestätigungsseite angegeben werden:

MailPoet3 Registrierungsbestätigungsmail für Double-Opt-in mehrsprachig mit Polylang
Um diese E-Mail multilingual zu erstellen, gebe ich in den Feldern Betreff und Inhalt der Registrierungs-E-Mail die Texte für alle meine Sprachen ein und maskiere diese entsprechend mit:

  • [bt-mailpoet lang=en][/bt-mailpoet]

Beispiel für einen dreisprachigen E-Mail-Betreff (englisch, deutsch und französisch):
[bt-mailpoet lang=en]Please confirm your newsletter registration[/bt-mailpoet][bt-mailpoet lang=de]Bitte bestätigen Sie Ihre Newsletter-Registrierung[/bt-mailpoet][bt-mailpoet lang=fr]Veuillez confirmer votre inscription à la newsletter[/bt-mailpoet]

Bei der Auswahl der Bestätigungsseite für die Newsletter-Registrierung in MailPoet ist es egal, welche Sprache die gewählte Bestätigungsseite hat. Wichtig ist, dass die Bestätigungsseiten in den unterschiedlichen Sprachen über Polylang entsprechend verknüpft sind:

MailPoet Registrierungsbesätigungsseiten für mehrere Sprachen mit Polylang verknüpfen
 

2. Plugin bt-ml-mailpoet zum Filtern der enstprechenden Sprache

Damit beim Versenden der Registrierungs-EMail nur ein Text in der entsprechenden Sprache (z.B. deutscher Betreff und Inhalt, Aktivierungslink zur deutschen Bestätigungsseite) versendet wird, habe ich ein Plugin mit Filter-Hooks geschrieben.
Welche Sprache gefiltert wird, ermittle ich mit Polylang. Polylang gibt mit der Funktion pll_current_language() die aktuell im Browser aktivierte Sprache des Users zurück.

<?php
/*
Plugin Name: BT - MailPoet multilingual mit Polylang
Description: MailPoet-Registrierungsformular multilingual mit Filter-Hooks und Polylang
Author: B. Thölke
Version: 1.0.0
Author URI: https://www.bt-webdesign.de/mailpoet-multilingual-mit-polylang/
*/

/*
 * MailPoet -> Einstellungen -> Registrierungsbestätigung (MailPoet -> Settings -> Sign-up Confirmation)
 * Betreff der Mail (Email subject) und Inhalt der E-Mail (Email content) können gefiltert werden
 * Beispiel Betreff beinhaltet deutschen und englischen Text:
 * [bt-mailpoet lang=en]Confirm the newsletter registration[/bt-mailpoet][bt-mailpoet lang=de]Bitte bestätigen Sie Ihre Newsletter-Registrierung[/bt-mailpoet]
 * je nachdem welche Sprache aktiv ist (pll_current_language - Polylang) wird nur der englischen bzw. deutsche Text gefiltert (Subject und Body)
 * Apply Filter in /mailpoet/lib/Subscribers/ConfirmationEmailMailer.php
 */
function bt_ml_mailpoet_signup_lang($text) {

  $lang = pll_current_language();       // returns 2-letters code of the current language (slug)
  if ( $lang === false ) return $text;

  switch ($lang){
    case 'de':                          // alle Sprachen, die genutzt werden
    case 'en':
//  case 'fr':
//  ...
         $beginn = '[bt-mailpoet lang='.$lang.']';
         $ende = '[/bt-mailpoet]';
      	 $pos = strpos($text, $beginn);
      	 if ( $pos !== false ) {
      	      $posende = strpos($text, $ende, $pos);
      	      if ( $posende !== false ) {
                   $text = substr($text, $pos + strlen($beginn), $posende - $pos - strlen($beginn));
      	           }
             }
  }
  return $text;
}

add_filter( 'bt_select_language', 'bt_ml_mailpoet_signup_lang', 10);

/*
 * MailPoet -> Einstellungen -> Registrierungsbestätigung (MailPoet -> Settings -> Sign-up Confirmation): Bestätigungsseite (Confirmation Page)
 * Post-Id von aktiver Sprache zurückgeben (z.B. URL für Registrierungsbestätigung)
 * für jede Sprache muss die Bestätigungsseite (Confirmation Page) für die Registrierungsbestätigung angelegt und über Polylang verknüpft sein
 * Filter-Hook kann auch für andere URLs verwendet werden
 * Apply Filter in /mailpoet/lib/Subscription/SubscriptionUrlFactory.php
*/
function bt_ml_mailpoet_signup_lang_url($wp_post_id){
	return pll_get_post($wp_post_id, pll_current_language());
}

add_filter( 'bt_select_language_url', 'bt_ml_mailpoet_signup_lang_url', 10);

Die erste Funktion im Plugin (bt_ml_mailpoet_signup_lang) filtert aus Subject und Content der Mail den Text passend zu der im Browser des Users aktivierten Polylang-Sprache.
Wenn Sie außer deutsch und englisch noch weitere Sprachen benötigen, muß der entsprechende Sprachcode in der Funktion hinzugefügt werden. Der Sprachcode entspricht dem Slug von Polylang (z.B. fr für französisch).

Die zweite Funktion (bt_ml_mailpoet_signup_lang_url) setzt den Aktivierungslink in der Mail passend zur aktivierten Polylang-Sprache. Bei MailPoet3 kann nur eine Bestätigungsseite ausgewählt werden. Dabei ist es egal welche Sprache die bei MailPoet gewählte Bestätigungsseite hat. Wichtig ist nur, dass die Bestätigungsseiten in den unterschiedlichen Sprachen mit Polylang entsprechend verknüpft sind.
 

Download Plugin bt-ml-mailpoet.zip zum Subject- und Content-Filtern und setzen der Sign-up-URL mit der bei Polylang aktiven Sprache:

Plugin Installation mit Filter-Hooks für MailPoet multilingual mit Polylang
 
Installieren Sie das Plugin bt-ml-mailpoet in Ihrer WordPress-Seite und aktivieren sie das Plugin.
 
 

3. Filter-Hooks in MailPoet3 einbauen

Der erste Filter-Hook wird zweimal eingebaut zum Filtern des Betreffs (subject) und des Inhalts (body)

  • $body = nl2br(apply_filters('bt_select_language',$signupConfirmation['body']));
  •  
  • 'subject' => apply_filters('bt_select_language',$signupConfirmation['subject']),

in folgende Datei:

  • /mailpoet/lib/Subscribers/ConfirmationEmailMailer.php

Filter Hooks in MailPoet3 einbauen
 
Der zweite Filter-Hook-Aufruf zur Auswahl der Bestätigungsseite in der gewünschten Sprache

  • $post = $this->getPost(apply_filters('bt_select_language_url',$this->settings->get('subscription.pages.confirmation')));

wird in folgende Datei eingebaut:

  • /mailpoet/lib/Subscription/SubscriptionUrlFactory.php

Filter Hook in MailPoet3 einbauen - Aktivierungslink in Registrierungsemail
 
Wichtig: Nach einem Update vom MailPoet-Plugin müssen die Anpassungen von Punkt 3 (Filter-Hooks in MailPoet3 einbauen) wiederholt werden.
 

Anwendung

Nach Einrichtung der Registrierungsbestätigung (siehe oben 1.), erfolgreicher Installation und Aktivierung des Plugins bt-ml-mailpoet (siehe oben 2.) und den Änderungen am MailPoet-Plugin (siehe 3.) werden die Registrierungsmails aus dem Frontend automatisch für die im Browser aktivierten Sprache versendet.

Wichtig: Wenn die Registrierungsmail aus dem Backend vom Adminstrator versendet werden soll, muss im Backend die gewünschte Sprache ausgewählt sein:

Bestätigungsmail aus dem Backend multilingual versenden
1. Polylang Sprache einstellen   2. Versende Bestätigungsmail erneut

Voraussetzungen:

Getestet mit folgenden MailPoet3-Versionen:

  • 3.55.0
  • 3.56.0

Sie haben Fragen zu dem Plugin bt-ml-mailpoet oder den Einbau der WordPress Filter-Hooks in das Plugin MailPoet?

Senden Sie mir Ihre Fragen, Wünsche und Anregungen an info@bt-webdesign.de.

 

Alle aufgeführten Firmen-, Markennamen und Warenzeichen sind Eigentum ihrer jeweiligen Inhaber.

 

Kontakt
05254 / 67673
info@bt-webdesign.de
Kontaktformular