/

【WordPress】パスワード再取得メッセージの変更方法

【WordPress】パスワード再取得メッセージの変更方法

WordPressでパスワードを忘れた場合、再取得するにはメールアドレスに再取得用のメールを送信します。

今回はこのメールのカスタマイズ方法を紹介します。

パスワードの再取得メールは頻度が高くないので優先度も落ちやすいです。ただ、デフォルトの文面がかなり単調なので少し手を加えた方が良いと思います。

プラグインでは「Ultimate Member」の場合を紹介します。後半ではフックを使ったコードからの変更を紹介します。

プラグインでの変更方法

「Ultimate Member」を使用してuserの管理を行っている場合の変更方法を紹介します。

「管理画面」⇒「設定」⇒「メール」⇒「パスワードリセットメール」

から変更が可能になっています。

Ultimate Memberのパスワードリセットメールはデフォルトで綺麗で、HTMLメールも使用できるのですが、英語です。

日本人を対象としているWebサイトは日本語の方が良いでしょうから変更は必須です。

コードでの変更方法

アカウント登録時のメール変更」ではメール内容の連想配列を扱いましたが、今回はバラバラに設定していきます。

というのも、パスワードの変更なので、「to」や「headers」を変更する必要があまりないからです。「サイト」から「ユーザー」へという形でデフォルト設定されています。

今回はタイトルとメッセージの変更方法を紹介します。

使用するフックは以下です。

  • タイトル・・・retrieve_password_title
  • メッセージ・・・retrieve_password_message
apply_filters( 'retrieve_password_title', $title, $user_login, $user_data );
  • $title ・・・タイトル デフォルト『「{サイト名}」パスワードリセット』
  • $user_login・・・ユーザー名
  • $user_data・・・WP_User 入力されたメールアドレスから取得したユーザーオブジェクト
apply_filters( 'retrieve_password_message', $message, $key, $user_login, $user_data );
  • $message ・・・メッセージ
  • $key・・・アクティベーションキー
  • $user_login・・・ユーザー名
  • $user_data・・・WP_User 入力されたメールアドレスから取得したユーザーオブジェクト

使用例(タイトル)

add_filter( 'retrieve_password_title', function ( $title, $user_login, $user_data ) {
    $site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );

    return sprintf( '[%s] パスワード変更手続き', $site_name );
}, 10, 3 );

タイトルは文字列を返すだけです。

使用できる引数は多いので大抵のパターンには対応可能だと思います。

使用例(メッセージ)

add_filter( 'retrieve_password_message', function( $message, $key, $user_login, $user_data ) {
    // ユーザーの言語取得
    $locale = get_user_locale( $user_data );

    // サニタイズしたサイト名
    $site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );

    $msg  = 'パスワードの変更がリクエストされました。' . "\r\n\r\n";
    $msg .= sprintf( __( 'Site Name: %s' ), $site_name ) . "\r\n";
    $msg .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n\r\n";
    $msg .= 'パスワードをリセットするには以下へアクセスし、手続きを完了させてください。' . "\r\n";

    // $keyをセットするのを忘れないように
    $msg .= network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . '&wp_lang=' . $locale . "\r\n\r\n\r\n";

    // リクエストしたIPアドレス
    if ( ! is_user_logged_in() ) {
        $requester_ip = $_SERVER['REMOTE_ADDR'];
        if ( $requester_ip ) {
            $msg .= sprintf(
                __( 'This password reset request originated from the IP address %s.' ),
                $requester_ip
            ) . "\r\n";
        }
    }

    return $msg;
}, 10, 4 );

メッセージで大事なのは再設定用のURLをつけることです。

今回の例はデフォルトのものになっています。

「key」「login」がURLに付与されていて、これを元に再設定用のURLへリダイレクト及び再設定URLでの認証を行うのでとても重要です。

IPアドレスもデフォルトで付いてます。不要であればサイト情報などに変更しましょう。

まとめ

パスワードを忘れた場合のメールはそんなに難しく考えることはありません。

ただ、ログイン周りの処理を知らないと再設定用URLの設定で必要な値を付け忘れかねません。

ログイン処理があまり良くわからない人はおまじないでも良いので付与しておきましょう。