WordPressの新規ユーザー登録完了時に送信されるメールの内容をカスタマイズする

WordPressにユーザー登録した時、管理者とユーザーそれぞれにメールが送信されます。
管理者には「新しいユーザーの登録があったこと」を通知し、新しいユーザーには「ユーザー名/パスワード」が通知されます。

新規ユーザーに送信されるメール
新規ユーザーに送信されるメール

ユーザー自身が登録」した場合はこの内容でもいいのですが、例えば「管理者が登録」した場合にこんなメールが届いたユーザーは何のことやらさっぱりわかりません。
自分の知らない間に何かに勝手に登録された!なんて思うかもしれません。

スポンサーリンク

Codexを参考にカスタマイズ

ちょうど先日、同じような状況で「メールの内容を変更したい」という相談があったので、Wordpressの新規ユーザー完了メールをカスタマイズしようと思います。

ユーザ通知機能は「wp new user notification」で定義されています。Codexには用例もあったので、それを参考にカスタマイズしようと思います。

参考 関数リファレンス/wp new user notification – WordPress Codex 日本語版

//関数リファレンス/wp new user notification より
//ユーザ通知機能を再定義
if ( !function_exists('wp_new_user_notification') ) {

	function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {

		$user = new WP_User( $user_id );

		$user_login = stripslashes( $user->user_login );
		$user_email = stripslashes( $user->user_email );

		$message  = sprintf( __('New user registration on %s:'), get_option('blogname') ) . "\r\n\r\n";
		$message .= sprintf( __('Username: %s'), $user_login ) . "\r\n\r\n";
		$message .= sprintf( __('E-mail: %s'), $user_email ) . "\r\n";

		@wp_mail(
			get_option('admin_email'),
			sprintf(__('[%s] New User Registration'), get_option('blogname') ),
			$message
		);

		if ( empty( $plaintext_pass ) )
			return;

		$message  = __('Hi there,') . "\r\n\r\n";
		$message .= sprintf( __("Welcome to %s! Here's how to log in:"), get_option('blogname')) . "\r\n\r\n";
		$message .= wp_login_url() . "\r\n";
		$message .= sprintf( __('Username: %s'), $user_login ) . "\r\n";
		$message .= sprintf( __('Password: %s'), $plaintext_pass ) . "\r\n\r\n";
		$message .= sprintf( __('If you have any problems, please contact me at %s.'), get_option('admin_email') ) . "\r\n\r\n";
		$message .= __('Adios!');

		wp_mail(
			$user_email,
			sprintf( __('[%s] Your username and password'), get_option('blogname') ),
			$message
		);
	}
}

functions.phpじゃダメだった!

WordPressのカスタマイズはfunctions.php
上記のコードをいつものようにfunctions.phpに追加してユーザー登録のテストをしてみました。
しかし! メールの内容が変更されてない!何でだ?

改めてCodexのページを見てみると、気になる文が・・・。

この関数は、プラグインを介して変更をすることができます。プラグインでこの機能を定義しない時、これが代わりに使用されます。

どうやらこの関数を含め「 wp-includes/pluggable.php」で定義されている関数は、プラグインを介することで変更できるようです。
ちなみに、get_included_files()で読み込む順番を調べてみたら、
プラグイン → pluggable.php → functions.php でした。

カスタマイズの基本はfunctions.phpでいいけど、pluggable.phpで定義されている関数を変更したい場合はプラグインで事前に定義しないといけないってことなんですね。なるほどー。

プラグイン化してみる

それでは、上記のコードをプラグインにしたいと思います。
プラグインにするっていっても、プラグインヘッダーを加えるくらいなので簡単です。

<?php
/*
Plugin Name: Custom New User Mail
Description: 新規ユーザー登録時に送信されるメール内容を変更します
*/
//ユーザ通知機能を再定義
if ( !function_exists('wp_new_user_notification') ) {
 function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {

 $user = new WP_User($user_id);

 $user_login = stripslashes($user->user_login);
 $user_email = stripslashes($user->user_email);
 $login_url = wp_login_url();
 $blog_name = get_option('blogname');
 $home_url = get_option('home');

 //管理人に送信されるメールの内容
 $message = sprintf(__('「%s」への新規ユーザ登録が行われました'), $blog_name) . "\r\n\r\n";
 $message .= sprintf(__('Username: %s'), $user_login) . "\r\n";
 $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

 @wp_mail(
 get_option('admin_email'),
 sprintf(__('[%s] New User Registration'),$blog_name),
 $message
 );

 if ( empty($plaintext_pass) )
 return;

//新規ユーザに送信されるメールの内容
$message = <<< EOM

{$blog_name}サイトへメンバー登録いたしましたので
ログインする際に必要なIDとパスワードをお知らせします。

●━━━━━━━━━━━━━━━━━━━━━━━━━━━●

 ユーザー名: {$user_login}
 パスワード: {$plaintext_pass}

 ログインページ
 {$login_url}

●━━━━━━━━━━━━━━━━━━━━━━━━━━━●


ご不明な点がありましたら下記までお問い合わせください。

 株式会社○○○○
 東京都○○区○○ 12-34
 TEL 00-0000-0000 FAX 00-0000-0000
 MAIL {$user_email}
 URL {$home_url}

EOM;

 wp_mail(
 $user_email,
 sprintf('[%s] メンバーへ登録いたしました', $blog_name),
 $message
 );
 }
}
?>

このファイルを「custom_new_user_mail.php」などとして保存します。
そして、このファイルをプラグインディレクトリにアップロードし、有効化します。

ユーザー登録をしてみて送信メールを確認

管理画面からユーザーを新規追加します。この時、「パスワードを送信しますか?」のチェックを忘れずに!

送られてきたメールがこちら!件名と本文もちゃんと変更されています。

カスタマイズ後にユーザーに送信されたメール

ユーザー登録関連で使えるプラグイン

登録フォームやログインページをカスタマイズしたり、色々と細かく設定したい場合は「Theme My Login」がおすすめです。
ユーザー登録を承認制にしたり、登録時に送信するメール内容の編集もできたり、ログイン後に任意のページへ移動させたりできます。

参考 WordPress › Theme My Login « WordPress Plugins

まとめ

会員制サイトなどで、ユーザー登録に関する設定を色々変更したい場合はやっぱりプラグインの方が便利です。ただ、メールの内容だけ変更したいだけなのにプラグインを入れるにのはちょっとな…という場合には今回のようなカスタマイズがいいかと思います。

参考 関数リファレンス/wp new user notification – WordPress Codex 日本語版
参考 WordPressで新規ユーザーへのメールをカスタマイズする

スポンサーリンク

シェアする

フォローする