WordPressのプラグインの作り方、WordPress内部の色々なAPIを解説をする本を書いています。
宮内さん、岡本さん、三好さんとの共著です。7月18日に発売みたいです。
その中で、WordPressのユーザーに関する章があったのですが、調べれば分かる内容が含まれているということで、簡素化しましたので、また、検索しても意外に見当たらないのでペタリとコピペであります。
この記事の概要
要するに、以下のことが書いてあります。
- WordPressのユーザーには、いろんな権限がある
- 会員登録させることもできる
- 権限グループという概念があって、最初は5つ(読者、寄稿者、投稿者、編集者、管理者)がある
- 5つの権限グループをまずは簡単に、次に、それぞれの権限グループでログインした場合の様子を管理画面付きで紹介する
- 既存の権限グループに含まれる権限を変更したり、新しい権限グループを作る方法もある
といったところです。それでは、以下、コピペです。
(レビューとかしていない原稿なので、誤字とかありましたらご了承ください)
権限グループと権限
ユーザー登録
WordPressのユーザー機能は充実しており、複数のユーザーを持つことができますし、ユーザーに権限を割り当てることで管理画面でできることのレベルを指定することもできます。
また、会員機能のベースとして利用することもでき、管理画面から有効化することでウェブサイトの訪問者がウェブサイトに自分のアカウントを作成することも可能です。
サイト訪問者による会員登録は、デフォルトでは無効化されています。
管理者としてログインして、設定、一般と進むと、メンバーシップの欄があります。「だれでもユーザー登録ができるようにする」という項目にチェックを入れると、サイト訪問者による会員登録が有効化されます。
また、その直下の「新規ユーザーのデフォルト権限グループ」という欄では、管理者から購読者まで、どの権限グループを割り当てるのかを指定することもできます。デフォルトでは購読者という権限グループになります。
次の画像は会員登録を有効化した場合の登録フォームです。
権限について
WordPressには、権限グループと権限いう概念があり、管理者はユーザーがサイト内で何ができて、何ができないのかをコントロールすることができるようになっています。
WordPressでは、投稿を新規作成する、固定ページを新規作成する、カテゴリーを作成する、コメントを承認する、プラグインやテーマをインストールしたり更新したりする、ユーザーを追加したり編集・削除する、といったいろいろなことができますが、権限がないとこうしたことはできないようになっています。
WordPressの本体を更新するためには、update_coreという権限が必要ですし、manage_categoriesという権限がないユーザーにはカテゴリーを増やしたり編集したりすることはできません。
権限グループとは、こうした権限をいくつかまとめたもので、デフォルトの状態では以下の6つが用意されています。
これらの6つの権限グループは、上から順番にできることが増えていき、上位レベルのユーザーは下位のレベルの権限をすべて含みます。
権限グループ(日本語) | 権限グループ(英語) | 概要 |
---|---|---|
購読者 | Subscriber | WordPressにログインすることが可能。 |
寄稿者 | Contributor | レビュー待ちの投稿を作成することができる。レビュー待ちになった投稿の公開は、編集者以上の権限グループのユーザーが行う。 |
投稿者 | Author | 投稿を行うことはできるが、固定ページや他のユーザーが作成した投稿を扱うことはできない。 |
編集者 | Editor | 投稿や固定ページ、カテゴリーなどを、他の人が作成した投稿を含めて扱うことができる。テーマやプラグイン、ユーザー、サイト設定を扱うことはできない。 |
管理者 | Administrator | トップレベルの権限グループで、すべての権限を持つ |
この表にあるようなデフォルトで設定されている権限グループと権限は、投稿と固定ページしかないシンプルなサイトを想定しています。
ウェブサイトやサービスによっては、複数のカスタム投稿タイプがあり、各投稿タイプの権限を分けたい場合や、会員制サイトを作成していて、課金の有無によってできることが異なるといった場合もあります。
そうした構成に対応する場合には、デフォルトの権限グループに加えて、オリジナルの権限グループや権限を作成することが可能です。
権限グループと権限の組み合わせを変更したり、プラグインによって追加した機能を利用できるユーザーを独自にコントロールすることができるのです。以下は、権限グループと権限を操作するための基本的な関数です。
関数名 | |
---|---|
add_cap() | 権限グループに権限を追加する |
remove_cap() | 権限グループから権限を取り除く |
add_role() | 新しい権限グループを追加する |
remove_role() | 既存の権限グループを削除する |
こうした関数を使って権限や権限グループをカスタマイズすると、デフォルトで想定されている権限グループの上位、下位といった概念が無くなり、権限グループによってできることやできないことが異なるだけ、という形になっていくでしょう。
プラグインを開発する時に、権限グループと権限についてよく理解していることは、とても重要です。
うっかりすると、テーマの変更やプラグインの追加、サイト全体にかかわる設定変更を、レベルの低いユーザーにも実行できるようにしてしまい、混乱を生じるからです。
実装する機能がどのような性質のもので、どういうユーザーに権限を渡すべきなのか、自覚的に作成を行いましょう。
デフォルトで用意されている権限グループと権限は、以下のようになっています。
購読者 Subscriber
- read
WordPressにログインして、自分のプロフィールを編集することができます。
Codexによれば、readという権限は、コアファイルでは、何かを判別するためには使われていません。
寄稿者 Contributor
購読者の権限に追加して、
- delete_posts
- edit_posts
自分の投稿は作れますが、他の人の投稿を編集できません。
また、投稿の公開もできず、編集者以上の権限グループに属する(あるいはpublish_posts権限を持つ)ユーザーに公開を託すことになります。
公開されたあとの投稿の編集もできません。
投稿者 Author
寄稿者の権限に追加して、
- delete_published_posts
- edit_published_posts
- publish_posts
- upload_files
寄稿者と違って、自分の投稿については、管理できるようになります。
また、画像のアップロードもできるようになります。
他のユーザーの投稿を編集することなどはできません。
編集者 Editor
投稿者の権限に追加して、
- delete_others_pages
- delete_others_posts
- delete_pages
- delete_posts
- delete_private_pages
- delete_private_posts
- delete_published_pages
- edit_others_pages
- edit_others_posts
- edit_pages
- edit_posts
- edit_private_pages
- edit_private_posts
- edit_published_pages
- manage_categories
- manage_links
- moderate_comments
- publish_pages
- read_private_pages
- read_private_posts
- unfiltered_html
他の人が作成した投稿を編集したり削除したりすることができます。
また、投稿だけではなく固定ページや、privateが含まれる非公開記事も編集可能になります。
投稿者までのユーザーには使えなかったhtmlタグを含めることができるようになります。
管理者 Administrator
すべてのことに関する権限があります。
- activate_plugins
- delete_plugins
- edit_dashboard
- edit_files
- edit_theme_options
- export
- import
- list_users
- manage_options
- promote_users
- remove_users
- switch_themes
- update_core
- update_plugins
- update_themes
- install_plugins
- install_themes
- delete_themes
- edit_plugins
- edit_themes
- edit_users
- create_users
- delete_users
コアの更新、テーマやプラグイン関連、設定関連、管理画面からのファイル編集、コンテンツのインポートやエクスポート、ユーザー関連についての操作は、デフォルトでは管理者のみが可能になっています。
add_cap() and remove_cap()
権限グループに割り当てられている、権限を変更するには、add_cap()とremove_cap()を利用します。
寄稿者に画像をアップロードする権限を追加しているのが次の例です。
ポイントは、データベースに保存された権限のリストを変更する処理であるため、アクティベーションフックを利用しているテント、無効化された際にもとに戻すためのディアクティベーションフックが利用されている点です。
そうしないと、WordPressが動くときに毎回データベースへのアクセスが発生してしまいます。
// add role on activation
register_activation_hook( __FILE__, 'nskw_activate' );
function nskw_activate() {
$role = get_role( 'contributor' );
$role->add_cap( 'upload_files' );
}
// remove role on deactivation
register_deactivation_hook( __FILE__, 'nskw_deactivate' );
function nskw_deactivate() {
$role = get_role( 'contributor' );
$role->remove_cap( 'upload_files' );
}
add_cap(), remove_cap()は、WP_Roles
WP_WP_Role
のメソッドなのでこの例のような書き方で呼び出します。
あるいは、以下のような形でもOKです。
global $wp_roles;
$wp_roles->add_cap( 'contributor', 'upload_files' );
最初の例での$roleの中身は以下のようになっています。
object(WP_Role
) (2) {
["name"]=>
string(11) "contributor"
["capabilities"]=>
array(5) {
["edit_posts"]=>
bool(true)
["read"]=>
bool(true)
["level_1"]=>
bool(true)
["level_0"]=>
bool(true)
["delete_posts"]=>
bool(true)
}
}
add_role()、remove_role()
デフォルトの権限グループにはない独自の権限グループを作成したり、権限グループを削除するには、add_role()、remove_role()を利用します。
まず、削除はとても簡単です。
// 購読者権限グループを削除
remove_role( 'subscriber' );
追加をするためには以下を利用します。
add_role( $role, $display_name, $capabilities );
引数名 | 内容 |
---|---|
$role | 権限グループの名前 |
$display_name | 表示名 |
$capabilities | 権限のリストを配列で渡す |
次の例は、編集者権限グループにedit_theme_optionsという権限を追加した、Webmasterという権限を追加しているものです。
// add Role on activation
register_activation_hook( __FILE__, 'nskw_activate' );
function nskw_activate() {
// editorのCapabilitiesを取得して、
$editor_role = get_role( 'editor' );
$new_cap = $editor_role->capabilities;
// edit_theme_optionsを追加
$new_cap['edit_theme_options'] = true;
add_role( 'webmaster', 'Webmaster', $new_cap );
}
// remove Role on deactivation
register_deactivation_hook( __FILE__, 'nskw_deactivate' );
function nskw_deactivate() {
remove_role( 'webmaster' );
}
コメント
コメント一覧 (2件)
[…] こちらの記事がかなりの情報量で参考になりました。 https://nskw-style.com/2014/wordpress/users-role-capability.html […]
[…] 引用:WordPressのユーザーの権限グループについて。管理画面のスクショ、権限の追加など。 […]