[WordPress]ユーザー登録やログインをメールアドレスのみ(=ユーザー名を不要)に変更する方法
こんばんは、webエンジニアのゾノ( @ozonosho )です。
さて、今日のブログではWordPressでユーザー登録やログインをメールアドレスのみ(=ユーザー名を不要)に変更する方法を紹介したいと思います。
今回は「半角英数字しか利用できないユーザー名はユーザーに表示したくない」という相談をいただいたので実装してみました。
ちなみに完成形のユーザー登録画面はこんな感じです。
たしかに最近のサービスってメールアドレスのみで登録できるのが普通なので、ユーザーIDみたいなものまでユーザーに設定させるのは嫌だなぁと僕も感じることがあります。
そんなわけでさっそく実装方法を見ていきましょう。
WordPressでユーザー登録やログインをメールアドレスのみ(=ユーザー名を不要)に変更する方法
実装は簡単で、functions.phpに下記のコードを追加してください。
//メールアドレスのみでユーザー登録(ユーザー名にメールアドレスを挿入) function callback_LoginFormRegister(){ if(isset($_POST['user_login']) && isset($_POST['user_email']) && !empty($_POST['user_email'])) { $_POST['user_email'] = stripslashes($_POST['user_email']); //ユーザー名にはメールアドレス(ドメイン除く)を挿入する list( $local, ) = explode( '@', $_POST['user_email'], 2 ); $_POST['user_login'] = sanitize_user($local, true); $pre_change = $_POST['user_login']; //ユーザー名が重複した場合は適当な数値を加える while(username_exists($_POST['user_login'])){ $_POST['user_login'] = $pre_change . '_' . rand(1, 999); } } } add_action('login_form_register', 'callback_LoginFormRegister'); //ユーザー名に関わるエラー判定を解除する function callback_RegistrationErrors($wp_error, $sanitized_user_login, $user_email){ if(isset($wp_error->errors['empty_username'])) { unset($wp_error->errors['empty_username']); } if(isset($wp_error->errors['username_exists'])) { unset($wp_error->errors['username_exists']); } return $wp_error; } add_filter('registration_errors', 'callback_RegistrationErrors', 10, 3); //ユーザー名に関するラベルを変更する function change_loginpage_username_label($label) { if (in_array($GLOBALS['pagenow'], array('wp-login.php'))) { if ($label == 'ユーザー名またはメールアドレス') { $label = 'メールアドレス'; } if ($label == 'ユーザー名またはメールアドレスを入力してください。新しいパスワードを作成するためのリンクをメールでお送りします。') { $label = 'メールアドレスを入力してください。新しいパスワードを作成するためのリンクをメールでお送りします。'; } } return $label; } add_filter( 'gettext', 'change_loginpage_username_label' ); //登録フォームのユーザー名入力欄を削除 function callback_LoginHead() { ?> <style> #registerform > p:first-child{ visibility: hidden; display:none; } </style> <?php } add_action('login_head', 'callback_LoginHead'); //メールアドレス欄にフォーカスさせる function callback_LoginFooter() { ?> <script type="text/javascript"> try { document.getElementById('user_email').focus(); } catch(e) {} </script> <?php } add_action('login_footer', 'callback_LoginFooter');
まず大前提として「Wordpressの仕様としてユーザー名を無くすことはできない」ため、ユーザー名にメールアドレスを挿入することで解決します。
1つ目の関数「callback_LoginFormRegister」でその処理を記述しています。
メールアドレスのままユーザー名にしても良いのですが、万が一ユーザー名が表示されてしまったときにメールアドレスが特定されてしまうのはあまりよろしくないので、メールアドレスの@以下のドメインは省く形でユーザー名に登録するようにしました。
2つ目の関数「callback_RegistrationErrors」では、登録フォームでボタンを押された際にユーザー名に関するエラーを省く処理を記述しています。
WordPress側から提供されているフックでは登録フォームのエラー判定前に処理を追加することができないため、エラー判定からユーザー名に関するものを省くことでユーザー名が未記入の状態でも通過させます。
その他の関数については、注釈にあるとおりテキストやデザインを編集しています。
内容はすこし複雑ですが上記コードをコピペするだけでユーザー名が不要のサイトになるので、ぜひ試してみてください。
おわりに
以上、今回の記事ではユーザー登録やログインをメールアドレスのみ(=ユーザー名を不要)に変更する方法を紹介させていただきました。
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。