Faça alguma coisa depois de enviar um email

11

Quero fazer algo depois que o WordPress enviou um email. Por exemplo, após enviar o e-mail "Redefinir senha" usando a wp_mail()função

Ameer Mousavi
fonte

Respostas:

14

Usando a classe PHPMailer com um retorno de chamada de ação:

Pesquisei na PHPMailerclasse e descobri que ela suporta uma ação personalizada .

Veja como o retorno de chamada é ativado com o doCallback()método na classe

Também há um PHPMailer teste no GitHub usando esse recurso por meio do callbackAction()retorno de chamada.

Podemos configurá-lo no WordPress com:

$phpmailer->action_function = 'wpse_mail_action';

Onde wpse_mail_action()está o retorno de chamada da ação.

Aqui está um exemplo de como podemos aplicar isso:

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

Agora temos acesso ao wpse_mail_actiongancho.

Poderíamos então adicionar nosso próprio registrador de mensagens e verificar se as mensagens foram enviadas com êxito ou não.

Exemplo:

Aqui está um exemplo (não testado) de como poderíamos fazer algo após o envio das postagens de "Redefinição de senha":

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

onde poderíamos adicionar outras restrições e envolver outras ações, se necessário, como o retrieve_passwordgancho.

Birgire
fonte
Obrigado a todos. Acabei de fazer o plugin e seu agora acessível a partir do diretório wordpress plugin: wordpress.org/plugins/telegram-for-wp
Ameer Mousavi
1
Você é bem-vindo e parabéns com o novo plugin @AmirMousavi
birgire
Há um conflito com o plug-in Formulário de contato 7. Não pode receber o resultado do envio. Seu carregador Ajax está girando para sempre; mesmo quando o email foi enviado com sucesso.
Ameer Mousavi
2
Testei esse método com o CF7 e funcionou como esperado. Se o ajaxloader estiver girando para sempre, poderá indicar erros não relacionados de javascript / PHP / Server e, portanto, wp_mail()nunca poderá ser chamado no CF7. Observe que os plug-ins de terceiros estão fora do tópico aqui no WPSE. @AmirMousavi
birgire