web-dev-qa-db-fra.com

Faites quelque chose après avoir envoyé un email

Je veux faire quelque chose après que WordPress ait envoyé un email. Par exemple, après avoir envoyé un courrier électronique "Réinitialiser le mot de passe" à l'aide de la fonction wp_mail().

11
Ameer Mousavi

Utilisation de la classe PHPMailer avec un rappel d'action:

J'ai creusé dans PHPMailer class et constaté qu'il prenait en charge une action personnalisée .

Voici comment le rappel est activé avec la méthode doCallback() dans la classe.

Il existe également une variable PHPMailertest sur GitHub utilisant cette fonctionnalité via le rappel callbackAction().

Nous pouvons le configurer dans WordPress avec:

$phpmailer->action_function = 'wpse_mail_action';

wpse_mail_action() est le rappel d'action.

Voici un exemple d'application de ceci:

/**
 * 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';
} );

Nous avons maintenant accès au hook wpse_mail_action.

Nous pourrions ensuite ajouter notre propre enregistreur de courrier et vérifier si les messages ont été envoyés avec succès ou non.

Exemple:

Voici un exemple (non testé) sur la manière dont nous pourrions faire quelque chose après l'envoi des messages "Reset du mot de passe":

/**
 * 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 );

où nous pourrions ajouter quelques restrictions supplémentaires et intégrer d'autres actions si nécessaire, comme le hook retrieve_password.

13
birgire