MailPoet – persönliche Newsletter-Anrede mit Du/Sie und Custom Field

Für personalisierte Newsletter soll MailPoet abhängig von der gewählten Anrede und der gewünschten Ansprache automatisch eine passende Begrüßung erzeugen.

Dabei werden zwei Newsletter-Listen verwendet:

  • Liste für „Du“
  • Liste für „Sie“

Zusätzlich gibt es ein eigenes MailPoet-Custom-Field „Anrede“ mit den Werten:

  • Herr
  • Frau
  • Divers

Der Vorname ist Pflichtfeld, der Nachname bleibt optional.

Verwendete Shortcodes

Folgende eigenen Shortcodes stehen zur Verfügung:

[custom:firstname_capitalized]
[custom:lastname_capitalized]
[custom:anrede_du]
[custom:anrede_sie]

Die beiden ersten Shortcodes korrigieren die Groß-/Kleinschreibung von Vor- und Nachnamen.
Das ist praktisch, weil viele Abonnenten ihren Namen bei der Anmeldung komplett klein schreiben.

MailPoet Custom Field prüfen

Das Feld „Anrede“ wird intern von MailPoet als Custom Field gespeichert.
Im konkreten Projekt lautet die Feld-ID:

cf_1

Im Frontend sieht das Feld beispielsweise so aus:

<input
    type="radio"
    name="data[cf_1]"
    value="Herr"
>

Wichtig: Die ID cf_1 ist projektspezifisch.
Bei anderen Installationen kann das Feld beispielsweise cf_2, cf_4 usw. heißen.
Die ID daher immer im Formular per Browser-Inspector prüfen.

PHP-Code

<?php

add_filter( 'mailpoet_newsletter_shortcode', function(
    $shortcode,
    $newsletter,
    $subscriber,
    $queue,
    $newsletter_body,
    $arguments
) {

    /*
     * Vorname mit korrekter Groß-/Kleinschreibung
     */
    if ( $shortcode === '[custom:firstname_capitalized]' ) {
        $name = trim( $subscriber->getFirstName() );

        return $name !== ''
            ? mb_convert_case( $name, MB_CASE_TITLE, 'UTF-8' )
            : '';
    }


    /*
     * Nachname mit korrekter Groß-/Kleinschreibung
     */
    if ( $shortcode === '[custom:lastname_capitalized]' ) {
        $name = trim( $subscriber->getLastName() );

        return $name !== ''
            ? mb_convert_case( $name, MB_CASE_TITLE, 'UTF-8' )
            : '';
    }


    /*
     * Persönliche Anrede:
     *
     * [custom:anrede_du]
     * [custom:anrede_sie]
     */
    if (
        $shortcode === '[custom:anrede_du]' ||
        $shortcode === '[custom:anrede_sie]'
    ) {

        /*
         * Namen holen und vereinheitlichen
         */
        $firstname = trim( $subscriber->getFirstName() );
        $lastname  = trim( $subscriber->getLastName() );

        if ( $firstname !== '' ) {
            $firstname = mb_convert_case(
                $firstname,
                MB_CASE_TITLE,
                'UTF-8'
            );
        }

        if ( $lastname !== '' ) {
            $lastname = mb_convert_case(
                $lastname,
                MB_CASE_TITLE,
                'UTF-8'
            );
        }


        /*
         * MailPoet-Custom-Field "Anrede" holen
         *
         * cf_1 = Herr / Frau / Divers
         *
         * WICHTIG:
         * cf_1 ist projektspezifisch und muss
         * bei anderen Installationen geprüft werden.
         */
        $gender = '';

        try {

            $mailpoet = \MailPoet\API\API::MP('v1');

            $data = $mailpoet->getSubscriber(
                $subscriber->getEmail()
            );

            if ( ! empty( $data['cf_1'] ) ) {
                $gender = trim( $data['cf_1'] );
            }

        } catch ( \Exception $e ) {

            /*
             * Falls MailPoet das Custom Field nicht liefern kann,
             * bleibt $gender leer.
             * Die Fallback-Anrede funktioniert trotzdem.
             */

            $gender = '';
        }


        /*
         * =========================================
         * DU-ANREDE
         * =========================================
         *
         * Frau   + Vorname -> Liebe Anna,
         * Herr   + Vorname -> Lieber Peter,
         * Divers + Vorname -> Hallo Alex,
         * keine Daten      -> Hallo,
         */

        if ( $shortcode === '[custom:anrede_du]' ) {

            if ( $firstname === '' ) {
                return 'Hallo,';
            }

            if ( $gender === 'Frau' ) {
                return 'Liebe ' . $firstname . ',';
            }

            if ( $gender === 'Herr' ) {
                return 'Lieber ' . $firstname . ',';
            }

            return 'Hallo ' . $firstname . ',';
        }


        /*
         * =========================================
         * SIE-ANREDE
         * =========================================
         *
         * Frau + Nachname -> Liebe Frau Müller,
         * Herr + Nachname -> Lieber Herr Müller,
         *
         * Divers:
         * Vor- + Nachname -> Guten Tag Alex Müller,
         * nur Vorname     -> Guten Tag Alex,
         *
         * keine Daten     -> Guten Tag,
         */

        if ( $shortcode === '[custom:anrede_sie]' ) {

            if ( $gender === 'Frau' && $lastname !== '' ) {
                return 'Liebe Frau ' . $lastname . ',';
            }

            if ( $gender === 'Herr' && $lastname !== '' ) {
                return 'Lieber Herr ' . $lastname . ',';
            }

            $name = trim( $firstname . ' ' . $lastname );

            if ( $name !== '' ) {
                return 'Guten Tag ' . $name . ',';
            }

            return 'Guten Tag,';
        }
    }


    return $shortcode;

}, 10, 6 );

Ausgabevarianten

Anrede Vorname Nachname Du-Version Sie-Version
Frau Anna Müller Liebe Anna, Liebe Frau Müller,
Frau Anna leer Liebe Anna, Guten Tag Anna,
Herr Peter Maier Lieber Peter, Lieber Herr Maier,
Herr Peter leer Lieber Peter, Guten Tag Peter,
Divers Alex Mustermann Hallo Alex, Guten Tag Alex Mustermann,
Divers Alex leer Hallo Alex, Guten Tag Alex,

Verwendung im Newsletter

Im Du-Newsletter:

[custom:anrede_du]

Im Sie-Newsletter:

[custom:anrede_sie]

Technische Hinweise

  • Der Shortcode wird von MailPoet für jeden Empfänger einzeln ausgewertet.
  • Die Vorschau sollte vor dem echten Versand getestet werden.
  • Zusätzlich immer mindestens einen echten Testversand durchführen.
  • Der Zugriff über $subscriber->getCustomFields() funktioniert in MailPoet 5.40.0 nicht.
  • Stattdessen wird der Subscriber über die offizielle MailPoet-API geladen.
  • Die Custom-Field-ID cf_1 muss bei anderen Projekten angepasst werden.

Empfohlene Formularstruktur

  • Anrede: Pflichtfeld mit Herr / Frau / Divers
  • Vorname: Pflichtfeld
  • Nachname: optional
  • Du/Sie-Auswahl: über zwei separate MailPoet-Listen