Haz algo después de enviar un correo electrónico

11

Quiero hacer algo después de que WordPress envió un correo electrónico. Por ejemplo, después de enviar el correo electrónico "Restablecer contraseña" usando la wp_mail()función.

Ameer Mousavi
fuente

Respuestas:

14

Usando la clase PHPMailer con una devolución de llamada de acción:

Investigué un poco en la PHPMailerclase y descubrí que admite una acción personalizada .

Así es como se activa la devolución de llamada con el doCallback()método en la clase.

También hay una PHPMailer prueba en GitHub con esta función a través de la callbackAction()devolución de llamada.

Podemos configurarlo en WordPress con:

$phpmailer->action_function = 'wpse_mail_action';

donde wpse_mail_action()está la devolución de llamada de acción.

Aquí hay un ejemplo de cómo podemos aplicar esto:

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

Ahora tenemos acceso al wpse_mail_actiongancho.

Luego podríamos agregar nuestro propio registrador de correo y verificar si los correos se enviaron con éxito o no.

Ejemplo:

Aquí hay un ejemplo (no probado) de cómo podríamos hacer algo después de enviar las publicaciones de "Restablecimiento de contraseña":

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

donde podríamos agregar algunas restricciones adicionales y envolvernos en otras acciones si fuera necesario, como el retrieve_passwordgancho.

Birgire
fuente
Muchas gracias Acabo de hacer el complemento y ahora está accesible desde el directorio de complementos de WordPress
Ameer Mousavi
1
De nada y felicidades con el nuevo complemento @AmirMousavi
birgire
Existe un conflicto con el complemento Contact Form 7. No puede recibir el resultado del envío. Su cargador Ajax ha estado girando para siempre; incluso cuando el correo electrónico se envió con éxito.
Ameer Mousavi
2
Probé este método con el CF7 y funcionó como se esperaba. Si el ajaxloader está girando para siempre, podría indicar errores de JavaScript / PHP / Servidor no relacionados y, por wp_mail()lo tanto , nunca podría llamarse dentro de CF7. Tenga en cuenta que los complementos de terceros están fuera de tema aquí en WPSE. @AmirMousavi
birgire