ワードプレスの会員制サイト制作用のプラグインには、フリーでも十分使えるものがいくつかありますが、今回は「WP-Members」を利用した案件です。他のプラグインでも使える方法ではないかと思います。
クライアントの希望は「ユーザー名に日本語を使いたい」ということだったのですが、ワードプレスの仕組み上これが出来ないことを説明し、さらにニックネームをつけて、表示名に選ぶことが出来ると伝えたところ、「登録時はユーザー名にメールアドレスと同じものを入れて、入力欄自体は見えないようにする。そのうえでニックネームを必須入力にして、ニックネームが自動的に表示名になるように」という希望が帰ってきました。
考え方は以下の通りです。
- ユーザー名の入力欄を見えなくする
- メールアドレスを入力したら、ユーザー名にメールアドレス欄の値を入力する
- ニックネームを必須入力欄として追加する
- 新規ユーザー登録時に、表示名がニックネームになるようにする
コード
メールアドレスとユーザー名の値を同じにする
ここはJSの出番です。
// ユーザー登録時にusernameにメールアドレスを自動入力
window.addEventListener('DOMContentLoaded', function(){
// input要素を取得
var usr_account = document.getElementById("user_email");
var usr_username = document.getElementById("username");
// イベントリスナーでイベント「change」を登録
usr_account.addEventListener("change",function(){
usr_username.value = this.value;
});
});
ユーザー名の入力欄を隠す
上記コードで、メールアドレスを入力したらユーザー名にメールアドレスが入ることを確認したら、ユーザー名の入力欄をCSSで隠します。
#wpmem_register_form input#username{
display:none!important;
}
#wpmem_register_form label[for=username]{
display:none;
}
WP-Membersはユーザー名を必須入力として出力しますので、そのラベルを消すために2つ目のCSSを書いています。
ユーザー登録時に表示名をニックネームに変更する
ここはfunctions.phpの出番です。これをやらないと、ユーザー名のメールアドレスが表示名になってしまい、ユーザー名を晒すことになってしまうので、要注意です。
// ユーザー登録時に表示名をニックネームに変更する
function fix_user_display_name($user_id) {
$user = get_user_by('id', $user_id);
$display_name = $user->nickname;
wp_update_user(array(
'ID' => $user_id,
'display_name' => $display_name
)) ;
}
ここまで出来たらテストで新規登録を行ってみて、希望通りに動くか確認します。
ログインフォームを変更する
最後に、ログインフォームを変更します。デフォルトの日本語表記は、ログイン時に「ユーザー名またはメールアドレス」と書かれています。このままだと会員はニックネームとパスワードでも入力出来ると勘違いしそうなので、ログインフォームに入力欄の表記は、メールアドレスのみに書き換える必要があります。
ここは「Loco Translate」を使って、無理やり翻訳を変更してしまいました。あまりいい方法とは言えませんが、他に良い方法が思いつかず。
上記で思った通りの動きになりました。