问题描述
我想在 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。