Manul Tech

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


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']
);

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

じゃあ簡単じゃんってことで、こんな感じで完成。
そのユーザ用のパスワードリセット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)."\n\n";
	$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;
}