Fai qualcosa dopo aver inviato l'e-mail


11

Voglio fare qualcosa dopo che WordPress ha inviato un'email. Ad esempio, dopo aver inviato l'e-mail "Reimposta password" utilizzando la wp_mail()funzione.

Risposte:


14

Utilizzo della classe PHPMailer con un callback di azione:

Ho scavato nella PHPMailerclasse e ho scoperto che supporta un'azione personalizzata .

Ecco come viene attivato il callback con il doCallback()metodo nella classe.

C'è anche un PHPMailer test su GitHub che utilizza questa funzione tramite il callbackAction()callback.

Possiamo configurarlo in WordPress con:

$phpmailer->action_function = 'wpse_mail_action';

dov'è wpse_mail_action()il callback dell'azione.

Ecco un esempio di come possiamo applicare questo:

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

Ora abbiamo accesso al wpse_mail_actiongancio.

Potremmo quindi aggiungere il nostro registratore di posta e verificare se le e-mail sono state inviate correttamente o meno.

Esempio:

Ecco un esempio (non testato) di come potremmo fare qualcosa dopo l'invio dei post "Reimpostazione password":

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

dove potremmo aggiungere ulteriori restrizioni e concludere altre azioni se necessario, come il retrieve_passwordgancio.


Grazie a tutti Ho appena creato il plug-in ed è ora accessibile dalla directory del plug-in wordpress
Ameer Mousavi

1
Prego e congratulazioni con il nuovo plugin @AmirMousavi
birgire,

Si è verificato un conflitto con il plug-in Contact Form 7. Non può ricevere il risultato dell'invio. Il suo caricatore Ajax gira da sempre; anche quando l'email è stata inviata con successo.
Ameer Mousavi,

2
Ho testato questo metodo con il CF7 e ha funzionato come previsto. Se ajaxloader gira per sempre, potrebbe indicare errori javascript / PHP / Server non correlati e quindi wp_mail()potrebbe non essere mai chiamato in CF7. Si noti che i plug-in di terze parti sono fuori tema qui su WPSE. @AmirMousavi
birgire,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.