Hacer 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" con la función wp_mail() .

    
pregunta Ameer Mousavi 09.06.2015 - 13:39

1 respuesta

13

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

Hice algunas excavaciones en el PHPMailer Categoría descubrió que admite una acción personalizada .

Aquí está la forma en que se activa la llamada a href="https://github.com/WordPress/WordPress/blob/cb39d03501aae82c7f16f67c93ab0452ef870c46/wp-includes/class-phpmailer.php#L3231"> doCallback() método en la clase.

También hay un PHPMailer test en el estado de juego en el último momento. callbackAction() callback.

Podemos configurarlo en WordPress con:

$phpmailer->action_function = 'wpse_mail_action';

donde wpse_mail_action() es la devolución de llamada de la 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 gancho wpse_mail_action .

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 que se envíen 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 envolverlas en otras acciones si es necesario, como el retrieve_password hook.

    
respondido por el birgire 09.06.2015 - 14:19

Lea otras preguntas en las etiquetas