elektro:elch

Es ist nicht ungefährlich, wenn ein Volk lesen und schreiben kann.

WordPress: Benutzer-Registrierungsmails personalisieren

Wenn sich auf einer WordPress-Installation ein neuer Benutzer registriert, bekommen der neue Benutzer und der Administrator eine Benachrichtigung. Bisher konnte man den Inhalt nur über Umwege ändern. Zwei neue Hooks vereinfachen den Vorgang.Die Standard-Mails sehen so aus:

Benutzer:

Von: deinBlog
Betreff: [deinBlog] Dein Benutzername und Passwort

Benutzername: neuer_benutzer

Unter der folgenden Adresse kannst du dein Passwort festlegen:

<http://deinBlog/wp-login.php?action=rp&key=kAwZCBR3xhvv9zIEJwbf&login=karl90>

http://deinBlog.de/wp-login.php

Administrator:

Von: deinBlog
Betreff: [deinBlog] Registrierung eines neuen Benutzers

Neue Benutzerregistrierung auf deiner Website deinBlog:

Benutzername: neuer_benutzer

E-Mail: neuer_benutzer@benutzer.de

Bis zur Verson 4.8 war der Text der Mails fest eingebaut. Der einzige Weg, den Text zu ändern, war es, einen Hook auf wp_mail() oder phpmailer zu setzen.

WordPress v4.9 bietet jetzt die Möglichkeit, mit den folgenden Filtern diese Mails auf einfache Weise anzupassen:

Diese Filter werden ausgeführt, nachdem der Benutzer zur Datenbank hinzugefügt wurde.

Die Filter für die Benutzer- und die Administrator-Mail folgen der selben Logik, lediglich die Namen der Filter und der Variablen unterscheiden sich:

$wp_new_user_notification_email_admin = apply_filters( 'wp_new_user_notification_email_admin', $wp_new_user_notification_email_admin, $user, $blogname );

Die Parameter enthalten die folgenden Werte:

  • $wp_new_user_notification_email_admin: Assoziatives Feld mit den Schlüsseln to, subject, message, headers.
  • $user: Ein WP_User-Objekt des registrierten Benutzers..
  • $blogname: Ein String, mit de mNamen des Blogs, bei dem sich der neue Benutzer registriert hat.

Mit diesen Werten lässt sich recht einfach eine eigene Email erstellen:

add_action('login_init', 'my_wp_new_user_notification_email_admin_init');

function my_wp_new_user_notification_email_admin_init() {
    add_filter( 'wp_new_user_notification_email_admin', 'my_wp_new_user_notification_email_admin', 10, 3); 
} 

function my_wp_new_user_notification_email_admin($wp_new_user_notification_email, $user, $blogname) { 
    $wp_new_user_notification_email['subject'] = sprintf('[%s] Neuer Benutzer %s hat sich registriert.', $blogname, $user->user_login);
   $wp_new_user_notification_email['message'] = sprintf( "%s (%s) hat sich auf Deinem Blog %s registriert.", $user->user_login, $user->user_email, $blogname); 
    return $wp_new_user_notification_email; }

(Wie immer bei Filtern: Nicht vergessen die geänderte Variable zurückzugeben.) Die Mail sieht jetzt so aus:

Betreff: [deinBlog] [deinBlog] Neuer Benutzer neuer_benutzer hat sich registriert.

neuer_benutzer (neuer_benutzer@benutzer.de) hat sich auf Deinem Blog deinBlog registriert.

Natürlich kann man mehr Daten in die Mail einfügen, als der Filter anbietet. Zum Beispiel kann man dem Administrator mitteilen, wie viele Benutzer sein Blog bereits hat:

function my_wp_new_user_notification_email_admin( $wp_new_user_notification_email, $user, $blogname ) {

    $user_count = count_users();

    $wp_new_user_notification_email['subject'] = sprintf('[%s] New user %s registered.', $blogname, $user->user_login);
    $wp_new_user_notification_email['message'] =
sprintf( "%s has registerd to your blog %s.", $user->user_login, $blogname) . "\n\n\r" . sprintf("This is your %d. user!", $user_count['total_users']);

    return $wp_new_user_notification_email;

}

Mit dem Parameter headers kann man auf einfache Weise die Header-Informationen der Mail ändern:

$wp_new_user_notification_email['headers'] = "From: meinBlog <meinblog@meinblog.de> \n\r cc: Admin 2 <admin2@myblog.de>";

In diesem Beispiel wir die Von:-Information geändert und der Benutzer admin2 zu den Empfängern hinzugefügt. Wie man sieht, werden verschieden Header-Teile durch “\n\r” (Return und Linefeed) getrennt.

Wie bereits erwähnt, kann man dies alles mit wp_mail() und phpmailer erledigen, aber die neuen Filter sind wesentlich einfacher zu benutzen.


(Photo by Joanna Kosinska on Unsplash)


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *