WordPressでは「投稿を編集できるか」・「プラグインを扱えるか」などの個別の『権限』が用意されていて、『権限グループ』ごとにどの『権限』持つかが決められています。( プラグインで編集可能 )
このページでは、そういった『権限』と『権限グループ』についてまとめていきます。
WordPressユーザーの『権限グループ』一覧
デフォルトでは、WordPressのユーザーは以下のいずれかの『権限グループ』に属します。
- 特権管理者 -
???
- 管理者 -
administrator
- 編集者 -
editor
- 投稿者 -
author
- 寄稿者 -
contributor
- 購読者 -
subscriber
左側が日本語での表記、右側がcurrent_user_can()
などに渡す時のスラッグ名です。
「特権管理者」(マルチサイトの管理者?)のスラッグがわからなかったです...。
権限グループごとの『権限』一覧
それぞれの権限グループがどのような『権限』を持つかも、まとめておきます。
下位の『権限グループ』が持っている『権限』は、上位の『権限グループ』も所有しています。
『特権管理者』が持つ特殊な権限
- manage_network
- manage_sites
- manage_network_users
- manage_network_plugins
- manage_network_themes
- manage_network_options
『管理者』が持つ権限
- activate_plugins
- edit_theme_options
- export
- import
- list_users
- manage_options
- promote_users
- remove_users
- switch_themes
- edit_dashboard
以下、通常サイトの『管理者』およびマルチサイト の『特権管理者』が持つ権限の一覧。
(マルチサイトにおける各サイトごとの『管理者』は以下の権限を持たない)
- create_users
- delete_plugins
- delete_themes
- delete_users
- edit_files
- edit_plugins
- edit_themes
- edit_users
- install_plugins
- install_themes
- update_core
- update_plugins
- update_themes
『編集者』以上が持つ権限
- 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
- edit_published_posts
- manage_categories
- manage_links
- moderate_comments
- publish_pages
- publish_posts
- read
- read_private_pages
- read_private_posts
- unfiltered_html
『投稿者』以上が持つ権限
- delete_published_posts
- edit_published_posts
- publish_posts
- upload_files
『寄稿者』以上が持つ権限
- delete_posts
- edit_posts
『購読者』以上が持つ権限
- read
current_user_can( )で特定の『権限グループ』以上かどうかを判定する方法
current_user_can()
という関数では、以下のようなことを判定することができます。
- 『権限』の名前を渡すと、現在のユーザーがその権限を持つかどうか
- 『権限グループ』の名前を渡すと、現在のユーザーがその権限グループに属しているかどうか
しかし、『投稿者』以上の権限グループに属しているかどうかを見極める場合にcurrent_user_can('author)
としてしまうと、『管理者』や『編集者』のユーザーはfalse
が返ってきます。
解決方法1:権限グループ名を全部指定する
if ( current_user_can('administrator', 'editor', 'author') ) {
/* 『投稿者』以上の権限グループのユーザーの場合に実行する処理 */
}
解決方法2:その権限グループから持てる特定の『権限』を指定する
if ( current_user_can('publish_posts') ) {
/* 『投稿者』以上の権限グループのユーザーの場合に実行する処理 */
}
publish_posts
やupload_files
などの権限は『投稿者』以上の権限グループが所有しているので、上記のような記述でOK。
- 『管理者』以上を判定する
update_core
/switch_themes
/export
など...
- 『編集者』以上を判定する
edit_pages
/delete_pages
など
- 『投稿者』以上を判定する
publish_posts
/upload_files
など
- 『寄稿者』以上を判定する
edit_posts
/delete_posts
『ユーザーレベル』について
『ユーザーレベル』という概念は、WordPressのバージョン3.0より前に利用されていたものだそうです。
バージョン3.0以降は『ユーザーレベル』の使用は非推奨となり、ここまで紹介してきたような個別の『権限』と『権限グループ』によって管理されます。