WordPressの権限ごとに異なる管理メニューを表示

functions.phpにroleを取得してメニューを決定するアクションを追加

wp_get_current_userでroleを把握

wordpressの管理画面には標準で左サイドバーに管理メニューが表示されるようになっている。本エントリーでは、ユーザー権限に応じて異なる管理メニューを表示する方法を書いてみる。

WordPress管理画面の権限制御を把握しておけば、マルチユーザーのサイト制作を行う際にその知識を役立てることができます。

やることは以下の二つで、

  • ユーザー権限の取得
  • メニュー項目の削除

最終的なコードは以下のようになった。このコードをテーマ関数であるfunctions.phpに追加した。

function userrole_menus() {

    $current_user = wp_get_current_user();

    if( $current_user->ID == "1" )  // 特権管理者の場合はメニューの削除をしない
    {

    }

    else  // 特権管理者以外の場合はダッシュボードと投稿メニューを削除する
    {
        remove_menu_page('index.php'); // ダッシュボード
        remove_menu_page('edit.php'); // 投稿
    }

//echo "<pre>";
//echo var_dump($current_user);
//echo "</pre>";
}

add_action('admin_menu', 'userrole_menus');

wp_get_current_userでログイン中のユーザー情報を取得できる。今回はユーザー権限部分のデータが必要だったので、var_dump()して確認したのが以下のデータ構造(一部)

["ID"]=>
int(3)
["caps"]=>
array(1) {
  ["editor"]=>
  bool(true)
}

上のデータ構造は、editor権限として設定されたユーザーアカウントのユーザー情報の一部。データ構造にもeditorというkeyが存在するのでeditor権限なのだろうと判断できると思う。しかし、マルチサイト環境下ではSuperAdmin(特権管理者)も管理者もadministratorとして表示される。

SuperAdminと管理者を分けて認識するためにはIDのkeyを利用することになる。上の例だと、IDは3になっている。3はeditorの番号で以下のようになっている。

1 → SuperAdmin(特権管理者)
2 → 管理者(administrator)
3 → 編集者(editor)

wordpressをマルチサイトで利用している場合には上のようなユーザー権限の順序になっている。

remove_menu_pageでメニューの削除

メニューの削除については、公式ページの情報が参考になる。

remove_menu_page()

に削除したいメニューのファイル名(メニュースラッグ)を指定すれば削除される。

そのため、特権管理者とそれ以外のユーザーで処理を分岐して、特権管理者の場合には、remove_menu_pageの処理を行わないようにすれば、それ以外のユーザーとの間で管理メニューに差を設定することができる。

参考:wp get current user

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Wordpressの権限ごとに異なる管理メニューを表示の記事にコメントを投稿