it-swarm.com.de

Tun Sie etwas, nachdem Sie eine E-Mail gesendet haben

Ich möchte etwas tun, nachdem WordPress eine E-Mail gesendet hat. Zum Beispiel nach dem Senden einer "Passwort zurücksetzen" -E-Mail mit der Funktion wp_mail().

11
Ameer Mousavi

Verwenden der PHPMailer-Klasse mit einem Aktionsrückruf:

Ich habe mich ein wenig mit der Klasse PHPMailer befasst und festgestellt, dass sie eine benutzerdefinierte Aktion unterstützt.

Hier ist wie der Callback mit der doCallback() Methode in der Klasse aktiviert wird.

Es gibt auch eine PHPMailertest auf GitHub, die diese Funktion über den callbackAction() Callback nutzt.

Wir können es in WordPress einrichten mit:

$phpmailer->action_function = 'wpse_mail_action';

dabei ist wpse_mail_action() der Aktionsrückruf.

Hier ist ein Beispiel, wie wir dies anwenden können:

/**
 * Custom PHPMailer action callback
 */
function wpse_mail_action( $is_sent, $to, $cc, $bcc, $subject, $body, $from )
{
    do_action( 'wpse_mail_action', $is_sent, $to, $cc, $bcc, $subject, $body, $from );
    return $is_sent; // don't actually need this return!
}

/**
 * Setup a custom PHPMailer action callback
 */
add_action( 'phpmailer_init', function( $phpmailer )
{
    $phpmailer->action_function = 'wpse_mail_action';
} );

Jetzt haben wir Zugriff auf den Hook wpse_mail_action.

Wir könnten dann unseren eigenen Mail-Logger hinzufügen und prüfen, ob die Mails erfolgreich versendet wurden oder nicht.

Beispiel:

Hier ist ein (ungetestetes) Beispiel, wie wir etwas tun können, nachdem "Password Reset" -Postings gesendet wurden:

/**
 * Do something after the "Password Reset" post has been successfully sent:
 */
add_action( 'wpse_mail_action', function( $is_sent, $to, $cc, $bcc, $subject, $body, $from )
{
    if( $is_sent && false !== stripos( $subject, 'Password Reset' ) )
        // do stuff

}, 10, 7 );

hier könnten wir einige weitere Einschränkungen hinzufügen und bei Bedarf weitere Aktionen ausführen, z. B. den Hook retrieve_password.

13
birgire