Lakukan sesuatu setelah mengirim email

11

Saya ingin melakukan sesuatu setelah WordPress mengirim email. Misalnya, setelah mengirim email "Atur Ulang Kata Sandi" menggunakan wp_mail()fungsi.

Ameer Mousavi
sumber

Jawaban:

14

Menggunakan kelas PHPMailer dengan callback tindakan:

Saya melakukan beberapa penggalian ke dalam PHPMailerkelas dan menemukan bahwa itu mendukung tindakan kustom .

Begini cara callback diaktifkan dengan doCallback()metode di kelas.

Ada juga PHPMailer tes pada GitHub menggunakan fitur ini melalui callbackAction()panggilan balik.

Kita dapat mengaturnya di WordPress dengan:

$phpmailer->action_function = 'wpse_mail_action';

di mana wpse_mail_action()action callback.

Berikut ini contoh bagaimana kami dapat menerapkan ini:

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

Sekarang kami memiliki akses ke wpse_mail_actionhook.

Kami kemudian dapat menambahkan logger surat kami sendiri dan memeriksa apakah surat berhasil dikirim atau tidak.

Contoh:

Berikut adalah contoh (yang belum diuji) bagaimana kami dapat melakukan sesuatu setelah posting "Reset Kata Sandi" dikirim:

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

di mana kita bisa menambahkan beberapa batasan lebih lanjut dan memasukkan ke dalam tindakan lain jika perlu, seperti retrieve_passwordkait.

birgire
sumber
Terima kasih semuanya. Saya baru saja membuat plugin dan sekarang dapat diakses dari direktori plugin wordpress
Ameer Mousavi
1
Terima kasih dan selamat dengan plugin baru @AmirMousavi
birgire
Ada konflik dengan plugin Contact Form 7. Tidak dapat menerima hasil pengiriman. Loader Ajax-nya telah berputar selamanya; bahkan ketika email berhasil dikirim.
Ameer Mousavi
2
Saya menguji metode ini dengan CF7 dan bekerja seperti yang diharapkan. Jika ajaxloader berputar selamanya, ini bisa menunjukkan kesalahan javascript / PHP / Server yang tidak terkait dan karena itu wp_mail()mungkin tidak pernah dipanggil dalam CF7. Perhatikan bahwa plugin pihak ke-3 berada di luar topik di WPSE. @AmirMousavi
birgire