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の処理を行わないようにすれば、それ以外のユーザーとの間で管理メニューに差を設定することができる。