ホーム >  編集カテゴリー一覧 > めばえ いろいろ > PHP > functions.php > 

★指定ユーザーのみ管理画面の機能を制限

2015年11月11日 / functions.php, WPユーザー権限設定

http://www.nxworld.net/wordpress/wp-current-user-can-and-get-currentuserinfo.html

こちらの説明も良い。2つの方法を紹介することで・・・理解が深まるかも。

上記で使用したcurrent_user_canget_currentuserinfo

「特定の権限以外のユーザー」 に適用する

if (!current_user_can('administrator')) {
 // ここに処理
}

何らかの理由でどうしても他のユーザーも「管理者」として登録する必要が出てきた場合は、current_user_canを使用して権限に条件分岐を行うことはできなくなります。

「特定のID以外のユーザー」 に適用する

global $current_user;
get_currentuserinfo();
if ($current_user->ID != "1" ) {
 // ここに処理
}

ユーザー権限などについての詳細は以下で確認できます。

 


 

http://dim5.net/wordpress/role-menu.html

こちらもありのようだ。

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

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

remove_menu_pageでメニューの削除

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

remove_menu_page()

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');

 

http://weblog.hy-z.com/skill/1095 こちらがよろしいようで・・・ふむふむgoodだがマルチサイトでは問題有

メニューの一部を非表示にする★これは//15で機能確認したOK

function remove_menus () {
 global $menu;
 global $current_user;
 get_currentuserinfo();
 if($current_user -> ID != "1") {
 $restricted = array(
 __('固定ページ'),
 __('コメント'),
 __('お問い合わせ'),
 __('外観'),
 __('プラグイン'),
 __('ユーザー'),
 __('ツール'),
 __('設定')
 );
 end ($menu);
 while (prev($menu)){
 $value = explode(' ',$menu[key($menu)][0]);
 if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){
 unset($menu[key($menu)]);
 }
 }
 remove_submenu_page('index.php','update-core.php'); //更新非表示
 remove_submenu_page('edit.php','edit-tags.php?taxonomy=post_tag'); //タグ非表示
 remove_submenu_page('edit.php','edit-tags.php?taxonomy=category'); //カテゴリー非表示
 remove_menu_page('siteguard'); //SiteGuardプラグイン非表示
 }
}
add_action('admin_menu', 'remove_menus');

http://dim5.net/wordpress/wpmu-remove-menu-page.html

add_action('admin_menu', array($this, 'remove_menus'));
add_action('admin_init', array($this, 'remove_menus_mu'));

admin_menuでは、マルチサイトの管理メニューは制御できない。
フックする順番としてはadmin_initのほうが後になるが、上の方法でシングルサイトの管理メニューとマルチサイトのメニューを制御できる。

製作者(ID:1)以外に適用させるので「$current_user->ID != “1”」を使いました。
if($current_user -> ID != “1”) 
これにより「ユーザーIDが1じゃなかった場合、処理をしなさい」という事になります。

一部のメニューは「$restricted = array」で指定しても非表示になりません。
その場合は「remove_menu_page」「remove_submenu_page」で非表示にしましょう。

($current_user -> user_login == ‘Nori’)だとNoriには非表示もできなくはないだろう。

★★★

function remove_menus(){
 global $menu; 
global $current_user; 
get_currentuserinfo(); 
//check first user 
if($current_user->user_login == 'user1'){ 
$restricted = array( 
__('Links'), 
__('Comments'), 
__('Appearance'), 
__('Plugins'), 
__('Profile'), 
__('Tools'), 
__('Settings') 
); 
end ($menu); 
while (prev($menu)){ 
$value = explode(' ',$menu[key($menu)][0]); if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);} } } 
//check second user 
if($current_user->user_login == 'user2'){ 
$restricted = array( 
__('Links'), 
__('Comments'), 
__('Appearance'), 
__('Plugins') ); 
end ($menu); 
while (prev($menu)){ 
$value = explode(' ',$menu[key($menu)][0]); if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);} } } } 
add_action('admin_menu', 'remove_menus'); 

メニューの名前を変更する

global $current_user;
get_currentuserinfo();
if ($current_user->ID != "1" ) {
 add_filter( 'gettext', 'change_side_text' );
 add_filter( 'ngettext', 'change_side_text' );
 function change_side_text( $translated ) {
 $translated = str_ireplace( 'ダッシュボード', '管理画面TOP', $translated );
 $translated = str_ireplace( 'ニュース', 'お知らせを書く', $translated );
 $translated = str_ireplace( '投稿', 'ブログを書く', $translated );
 $translated = str_ireplace( 'メディア', '画像の管理', $translated );
 return $translated;
}

ここではCSSを利用しています。 表示オプションに指定されている「#screen-options-link-wrap」「#contextual-help-link-wrap」を「Display:none」で非表示にすることが出来ます。

ダッシュボードに製作者からのお知らせを載せる★

global $current_user;
get_currentuserinfo();
if ($current_user->ID != "1" ) {
 add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');
 function my_custom_dashboard_widgets() {
 global $wp_meta_boxes;
 wp_add_dashboard_widget('custom_help_widget', 'HYZstudioからのお知らせ', 'dashboard_text');
 }
 function dashboard_text() {
 echo '<p>ここに文章を書く</p>';
 }
}