WordPressでは、新規ユーザー登録を誰でもできるように設定できます。ログイン画面から、「登録」をクリックすると、下記のような画面にいけます。
新規ユーザーの権限は、管理画面で設定します。この時、通常は登録ユーザーの権限を制限すると思いますが、管理者や編集者といった、権限の豊富なユーザーも、管理画面の選択肢としては表示されます。もし、設定ミスなどで「管理者」にしてしまうと、新規ユーザー登録した人が「管理者」権限を持つ、ということになります。
標準インストール時の管理画面では、下記のように、管理者も選択可能です。
利便性とリスク
もちろん、ユーザー参加型サイトなら、誰でもユーザー登録を可能にすることがあるでしょう。しかし、このような重大な設定が、簡単にできると、設定は楽かもしれませんが、管理者が設定ミスした場合に、いたずらされてしまう、というリスクもあります。
とくに、「新規ユーザー登録時の権限に管理者が選べる」については、影響が大きいです。このような設定にすることはまず無いでしょう。
新規ユーザー登録時の権限を制限する
なので、新規ユーザー登録時の権限を制限するように設定してみます。こうすれば、間違えて「新規ユーザーの権限を豊富なものにする」ことが避けられます。 ※力技です。
// オプションから管理者、編集者、投稿者を消す function remove_from_default_role() { ?><script type="text/javascript"> jQuery(document).ready(function($){ $("option[value='author'").remove(); $("option[value='editor'").remove(); $("option[value='administrator'").remove(); }); </script><?php } add_action( 'admin_head-options-general.php', 'remove_from_default_role' ); // 寄稿者、購読者以外が設定されていたら、寄稿者に書き換える function set_available_role( $data ) { $default = 'contributor'; $allowed = array( 'contributor', 'subscriber' ); if ( in_array( $data, $allowed )) { return $dta; } else { return $default; } } add_filter( 'option_default_role', 'set_available_role' );
remove_from_default_role
は、jQueryを使って、選択肢から管理者、編集者、投稿者を消しています。インラインでJavaScriptを書いていますが、きちんと書くなら別ファイルにスクリプトを書いたほうがよいかもしれません。
set_available_role
は、DBに保存されているオプション値をチェックします。もし寄稿者、購読者以外が設定されていた場合は、寄稿者に書き換えます。
選択できる権限を寄稿者、購読者に変えた画面です。
新規ユーザーの権限の選択肢を寄稿者、購読者のみにすることができました。