Faites quelque chose après avoir envoyé un e-mail


11

Je veux faire quelque chose après que WordPress ait envoyé un e-mail. Par exemple, après l'envoi d'un e-mail "Réinitialiser le mot de passe" à l'aide de la wp_mail()fonction.

Réponses:


14

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

J'ai fait quelques recherches dans la PHPMailerclasse et j'ai constaté qu'elle prend en charge une action personnalisée .

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

Il existe également un PHPMailer test sur GitHub utilisant cette fonctionnalité via le callbackAction()rappel.

Nous pouvons le configurer dans WordPress avec:

$phpmailer->action_function = 'wpse_mail_action';

wpse_mail_action()est le rappel d'action.

Voici un exemple de la façon dont nous pouvons appliquer 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';
} );

Maintenant, nous avons accès au wpse_mail_actioncrochet.

Nous pourrions alors ajouter notre propre enregistreur de courrier et vérifier si les courriels ont bien été envoyés ou non.

Exemple:

Voici un exemple (non testé) de la façon dont nous pourrions faire quelque chose après l'envoi des messages "Réinitialisation 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 envelopper d'autres actions si nécessaire, comme le retrieve_passwordcrochet.


Merci à tous. Je viens de rendre le plugin et son désormais accessible depuis le répertoire des plugins wordpress
Ameer Mousavi

1
Vous êtes les bienvenus et félicitations avec le nouveau plugin @AmirMousavi
birgire

Il existe un conflit avec le plug-in Contact Form 7. Il ne peut pas recevoir le résultat de l'envoi. Son chargeur Ajax tourne depuis toujours; même lorsque l'e-mail a été envoyé avec succès.
Ameer Mousavi

2
J'ai testé cette méthode avec le CF7 et elle a fonctionné comme prévu. Si l'ajaxloader tourne indéfiniment, cela pourrait indiquer des erreurs javascript / PHP / Server non liées et wp_mail()pourrait donc ne jamais être appelé dans CF7. Notez que les plugins tiers sont hors sujet ici sur WPSE. @AmirMousavi
birgire
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.