Zrób coś po wysłaniu e-maila

11

Chcę coś zrobić po wysłaniu wiadomości e-mail przez WordPress. Na przykład po wysłaniu wiadomości e-mail „Zresetuj hasło” za pomocą wp_mail()funkcji.

Ameer Mousavi
źródło

Odpowiedzi:

14

Używanie klasy PHPMailer z wywołaniem zwrotnym akcji:

Zagłębiłem się w PHPMailerklasę i odkryłem, że obsługuje niestandardową akcję .

Oto jak wywołanie zwrotne jest aktywowane za pomocą doCallback()metody w klasie.

Istnieje również PHPMailer test na GitHub przy użyciu tej funkcji za pośrednictwem callbackAction()wywołania zwrotnego.

Możemy to skonfigurować w WordPress za pomocą:

$phpmailer->action_function = 'wpse_mail_action';

gdzie wpse_mail_action()jest wywołanie zwrotne akcji.

Oto przykład, w jaki sposób możemy to zastosować:

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

Teraz mamy dostęp do wpse_mail_actionhaka.

Następnie moglibyśmy dodać własny rejestrator poczty i sprawdzić, czy wiadomości zostały pomyślnie wysłane, czy nie.

Przykład:

Oto (niesprawdzony) przykład, w jaki sposób możemy coś zrobić po wysłaniu wpisów „Resetowanie hasł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 );

gdzie moglibyśmy dodać dalsze ograniczenia i zawinąć w inne działania, jeśli to konieczne, takie jak retrieve_passwordhak.

birgire
źródło
W ogóle dziękuję Właśnie utworzyłem wtyczkę i jest ona teraz dostępna z katalogu wtyczek wordpress
Ameer Mousavi
1
Serdecznie witamy i gratulujemy nowej wtyczki @AmirMousavi
birgire
Wystąpił konflikt z wtyczką Contact Form 7. Nie może otrzymać wyniku wysłania. Jego moduł ładujący Ajax kręci się od zawsze; nawet jeśli wiadomość e-mail została pomyślnie wysłana.
Ameer Mousavi,
2
Testowałem tę metodę z CF7 i działała ona zgodnie z oczekiwaniami. Jeśli ajaxloader kręci się wiecznie, może to wskazywać na niepowiązane błędy javascript / PHP / Server i dlatego wp_mail()może nigdy nie zostać wywołany w CF7. Zauważ, że wtyczki innych firm nie są tutaj tematem na WPSE. @AmirMousavi
birgire