Manul Tech

WordPressでユーザ登録時に送信されるメールの内容を変更する

そういえばそんな機能もあったなーってぐらいほぼ使っていなかったけど
依頼があったので方法を調べてみた。

Ver4.9.0以降はフィルターで実装可能

ググるとプラグイン扱いで実装しないと(function.phpに書いても動かない)いう記事ばかりだった。
wp_new_user_notificationという関数を上書きするという方法らしいので、WPのコードを見てみると

$wp_password_change_notification_email = apply_filters( 'wp_password_change_notification_email', $wp_password_change_notification_email, $user, $blogname );

wp_mail(
    $wp_password_change_notification_email['to'],
    wp_specialchars_decode( sprintf( $wp_password_change_notification_email['subject'], $blogname ) ),
    $wp_password_change_notification_email['message'],
    $wp_password_change_notification_email['headers']
);

wp_password_change_notification_emailをググってみると、Ver4.9.0からはフィルターが実装されたという情報が。

WordPress 私的マニュアル
wp_new_user_notification

じゃあ簡単じゃんってことで、こんな感じで完成。
そのユーザ用のパスワードリセットURLはフィルターの引数からは取得できなかったようだったから、デフォルトのメッセージの文字列からぶっこ抜く事にした。

add_filter('wp_new_user_notification_email', 'custom_user_notigication', 10, 2);
function custom_user_notigication($wp_new_user_notification_email, $user){
    $message = sprintf('ユーザー名: %s', $user->user_login)."nn";
    $message .= '以下のページでパスワードを設定してください。'."n";
    preg_match('/<(.+)>/', $wp_new_user_notification_email['message'], $matches);
    $message .= '<'.$matches[1].'>'."n";

    $wp_new_user_notification_email['message'] = $message;

    return $wp_new_user_notification_email;
}

コメント0