問題描述
我想在 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。