権限グループの追加とユーザー権限を追加する方法【wordpress】
wordpressでデフォルト用意されている権限は「管理者」「編集者」「投稿者」「寄稿者」「購読者」の5つです。
これらの権限グループでは作成したいサイト・システムと合わないという場合には独自の権限グループを追加することができます。
また、作成した権限グループにはユーザー権限を自由にセットすることができます。
権限グループとユーザー権限について区別がついていない場合この後を読んでいくとややこしくなるので以下と思ってください。
- 権限グループ・・・「管理者」「購読者」など
- ユーザー権限・・・「manage_options」「read」など
前半ではデフォルトの権限グループに付与されているユーザー権限の説明、後半では権限グループの作成、ユーザー権限の追加について説明していきます。
デフォルトのユーザー権限
デフォルトのユーザー権限は以下のようになっています。マルチサイトで使用される権限グループ「Super admin」は除いています。
管理者
- activate_plugins プラグインオン
- delete_others_pages 他の人が作成した固定ページの削除
- delete_others_posts 他の人が作成した投稿の削除
- delete_pages 固定ページ削除
- delete_posts 投稿削除
- delete_private_pages 保護された固定ページの削除
- delete_private_posts 保護された投稿の削除
- delete_published_pages 公開されている固定ページの削除
- delete_published_posts 公開されている投稿の削除
- edit_dashbord ダッシュボードの編集
- edit_others_pages 他の人が作成した固定ページの編集
- edit_others_posts 他の人が作成した投稿の編集
- edit_pages 固定ページの編集
- edit_posts 投稿の編集
- edit_private_pages 保護された固定ページの編集
- edit_private_posts 保護された投稿の編集
- edit_published_pages 公開された固定ページの編集
- edit_published_posts 公開された投稿の編集
- edit_theme_options テーマの編集(外観⇒「ウィジェット」「メニュー」「カスタマイズ」「ヘッダー」)
- export エクスポート ツール
- import インポート ツール
- list_users ユーザーページへのアクセス
- manage_categories カテゴリーへのアクセス
- manage_links パーマリンクの編集
- manage_options 設定の変更(設定⇒「一般」「投稿設定」「表示設定」「ディスカッション」「パーマリンク設定」「その他(独自実装のオプション値に変更があるもの)」)
- moderate_comments コメントのモデレート(承認、破棄)
- promote_users ユーザーの権限を変更可能
- publish_pages 固定ページの公開
- publish_posts 投稿の公開
- read_private_pages 保護付き固定ページの閲覧
- read_private_posts 保護付き投稿の閲覧
- read 管理画面へのアクセス許可 「ダッシュボード」「プロフィール」
- remove_users ユーザーの削除
- switch_themes テーマの変更 「外観」外観:「テーマ」
- upload_files メディアの追加 「メディア」メディア:「新規追加」
- customize カスタマイザー
- delete_site マルチサイト用のサイト削除機能
- update_core wordpress本体のアップデート
- update_plugins プラグインのアップデート
- update_themes テーマのアップデート
- install_plugins プラグインのインストール
- install_themes テーマのインストール
- delete_themes テーマの削除
- delete_plugins プラグインの削除
- edit_plugins プラグインの編集
- edit_themes テーマの編集
- edit_files ※使用されていない権限
- edit_users ユーザーの編集
- add_users ※promote_userに置換されています
- create_users ユーザーの作成
- delete_users ユーザーの削除
- unfiltered_html ユーザーがHTML、javascript などのコードを固定ページ、投稿、コメント、ウィジェットに投稿することを許可
編集者
- delete_others_pages 他の人が作成した固定ページの削除
- delete_others_posts 他の人が作成した投稿の削除
- delete_pages 固定ページ削除
- delete_posts 投稿削除
- delete_private_pages 保護された固定ページの削除
- delete_private_posts 保護された投稿の削除
- delete_published_pages 公開されている固定ページの削除
- delete_published_posts 公開されている投稿の削除
- 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_private_pages 保護付き固定ページの閲覧
- read_private_posts 保護付き投稿の閲覧
- read 管理画面へのアクセス許可 「ダッシュボード」「プロフィール」
- upload_files メディアの追加 「メディア」メディア:「新規追加」
- unfiltered_html ユーザーがHTML、javascript などのコードを固定ページ、投稿、コメント、ウィジェットに投稿することを許可
投稿者
- delete_posts 投稿削除
- delete_published_posts 公開されている投稿の削除
- edit_posts 投稿の編集
- edit_published_posts 公開された投稿の編集
- publish_posts 投稿の公開
- read 管理画面へのアクセス許可 「ダッシュボード」「プロフィール」
- upload_files メディアの追加 「メディア」メディア:「新規追加」
寄稿者
- delete_posts 投稿削除
- edit_posts 投稿の編集
- read 管理画面へのアクセス許可 「ダッシュボード」「プロフィール」
購読者
- read 管理画面へのアクセス許可 「ダッシュボード」「プロフィール」
権限がないとトップメニューやサブメニューが表示されない場合もあります。
次に紹介する権限グループの作成の際に表示したいページが表示されない場合は上を参考にして権限を付け加えてみてください。
独自権限グループとユーザー権限
権限グループとユーザー権限の追加方法を見ていきます。権限グループもユーザー権限も簡単に追加出来てしまいます。
add_action( 'init', function() {global $wp_roles;if( empty( $wp_roles ) ) {$wp_roles = new WP_Roles();}// 権限グループの追加$wp_roles->add_role( 'my_subsc', '定期購読者', [// 独自ユーザー権限'read-category-blog',]);// デフォルトユーザー権限を付与$wp_roles->add_cap( 'my_subsc', 'read' );$wp_roles->add_cap( 'my_subsc', 'read_private_posts' );$wp_roles->add_cap( 'my_subsc', 'read_private_pages' );} );
WP_Userクラスのメソッドadd_roleで権限グループの追加ができます。
add_role( $role, $display_name, $capabilities );
$roleには権限グループ名、$display_nameには表示用の権限グループ名(日本語可)、$capabilitiesには配列で付与したい独自のユーザー権限を追加します。
ここで付与した独自のユーザー権限は定義しただけでは何の意味も持ちません。また、ここにデフォルトのユーザー権限を入れてもその権限を取得できるわけではありません。
独自のユーザー権限は自身でチェックするために使用します。(以下の例「ブログというカテゴリーを持った投稿の閲覧権限チェック」)
if( has_category( 'blog' ) && !current_user_can( 'read-category-blog' ) ) {echo '<p>閲覧する権限がありません。</p>';}
もう一つ例を見てみます。
- 独自の権限グループを作成(権限グループ名:example)
- 独自のトップメニューを作成
- メニューでは画像を選択し、オプション値として保存する
add_action( 'init', function() {global $wp_roles;if( empty( $wp_roles ) ) {$wp_roles = new WP_Roles();}// 権限グループの追加$wp_roles->add_role( 'example', '例', [// 独自ユーザー権限 今回はなし]);// デフォルトユーザー権限を付与$wp_roles->add_cap( 'example', 'read' );$wp_roles->add_cap( 'example', 'updaload_files' );$wp_roles->add_cap( 'example', 'manage_options' );} );add_action( 'admin_menu', function () {add_menu_page( '例', '例', 'example', 'example', 'example_callback', 'dashicons-editor-table' );} );function example_callback() {?><form action="options.php" method="post"><?phpsettings_fields( 'example' );do_settings_sections( 'example' );submit_button();?></form><?php}add_action( 'admin_init', function() {// 略 セクション登録 フィールド登録 オプション名登録等}
上の例では独自のユーザー権限は入れていません。
管理画面上にログインするために「read」を付与し、メニュー上で画像を選択するために「upload_files」を付与、メニューから設定を保存する際にオプション値を使うので「manage_options」を付与しています。
メニュー内にメディアライブラリを開くボタンなど仕込んでおいても「upload_files」権限がない場合には登録してある画像も見ることができず、アップロードもすることができません。メディアライブラリが開くだけです。
また、上記のようにオプション値として設定を保存する場合には「mage_options」が必須です。これがないと保存ボタンを押しても保存されません。
今回の例だとmanage_optionsによって表示される設定画面は表示したくないので下記のように「設定」ページを非表示にして対応します。
remove_menu_page( 'options-general.php' );