Ich möchte etwas tun, nachdem WordPress eine E-Mail gesendet hat. Zum Beispiel nach dem Senden der E-Mail “Reset Password” mit der function wp_mail()
.
Ich habe etwas in die PHPMailer
class PHPMailer
und festgestellt, dass sie eine benutzerdefinierte Aktion unterstützt .
So wird der callback mit der Methode doCallback()
in der class aktiviert.
Es gibt auch einen PHPMailer
Test auf GitHub, der diese function über den callbackAction()
-callback verwendet.
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 das 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 wpse_mail_action
Hook.
Wir könnten dann unseren eigenen Mail-Logger hinzufügen und überprüfen, ob die Mails erfolgreich versendet wurden oder nicht.
Hier ist ein (ungetestetes) Beispiel, wie wir etwas tun könnten, nachdem “Password Reset” Beiträge 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 weitere Einschränkungen hinzufügen und ggf. in andere Aktionen wie den Hook retrieve_password
einbinden.