web-dev-qa-db-ja.com

電子メールを送信した後に何かをする

WordPressがメールを送った後に何かしたいのですが。たとえば、wp_mail()関数を使用して「パスワードのリセット」Eメールを送信した後などです。

11
Ameer Mousavi

アクションコールバックでPHPMailerクラスを使う:

PHPMailer クラスを詳しく調べたところ、 カスタムアクションがサポートされていることがわかりました .

以下は、 クラスの doCallback() メソッドを使用してコールバックをアクティブにする方法です。

callbackAction()コールバックを通してこの機能を使用するGitHub上のPHPMailerテスト もあります。

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フックにアクセスできました。

それから私達は私達の自身のメールロガーを追加してメールが正常に送信されたかどうかをチェックすることができます。

例:

「パスワードリセット」の投稿が送信された後に、どうすればよいか(未テストの)の例を示します。

/**
 * 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フックのように、必要に応じてさらに制限を追加し、他のアクションにラップすることができます。

13
birgire