问题描述

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