問題描述

我想在 WordPress 傳送電子郵件之後做一些事情。例如,使用 wp_mail()函式傳送”Reset Password” 電子郵件。

最佳解決方案

使用 PHPMailer 類與動作回撥:

我做了一些挖掘到 PHPMailer 類,發現它支援一個 custom action

Here’s 如何在類中使用 doCallback()方法啟用回撥。

在 GitHub 上還有一個 PHPMailer test,透過 callbackAction()回撥使用此功能。

我們可以在 WordPress 中設定:

$phpmailer->action_function = 'wpse_mail_action';

其中 wpse_mail_action()是動作回撥。

以下是我們如何應用這個例子:

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

現在我們可以訪問 wpse_mail_action 鉤子。

然後我們可以新增我們自己的郵件記錄器,並檢查郵件是否成功傳送。

例:

這是一個 (未經測試) 的示例,我們如何在傳送”Password Reset” 帖子後做些事情:

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

在那裡我們可以新增一些進一步的限制,如果需要,就像 retrieve_password 鉤子一樣包裝其他操作。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。