[WordPress] 管理画面のサイドメニューを権限、ユーザー別にカスタマイズ

0204-2

今回は「Wordpress管理画面のサイドメニューを権限別やユーザー別にカスタマイズ表示する方法」を紹介しようと思います。

前回の記事“WrodPress 管理画面のサイドメニューをカスタマイズするプラグイン[Admin Menu Editor]”で書いたとうり「function.php」に記述してカスタマイズする方法を紹介します。

前回の記事“WrodPress 管理画面のサイドメニューをカスタマイズするプラグイン[Admin Menu Editor]”で紹介したプラグインでは権限別やユーザー別のカスタマイズが出来ません。

なので、「Admin Menu Editor」プラグインは表示名や順番を変更するのに使用し
表示、非表示を「function.php」で制御しよう!

ということです。

 

1,ユーザー権限別サイドメニューの非表示設定


//ユーザー権限に対して管理画面サイドナビ表示設定
function remove_menus () {
global $menu;

//権限aのメニュー設定
if ( current_user_can('権限aスラッグ名') ) {
$restricted1 = array(
__('非表示にするメニュー名'),
__('非表示にするメニュー名')
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted1)){
unset($menu[key($menu)]);
}
}
}

//権限bメニュー設定
if ( current_user_can('権限bスラッグ名') ) {
$restricted2 = array(
__('非表示にするメニュー名')
);
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted2)){
unset($menu[key($menu)]);
}
}
}

}
add_action('admin_menu', 'remove_menus');

 

ユーザーの権限別にサイドメニューの非表示設定をする場合は、上記のように記述します。

「function.php」内の一番下に記述してください。
一番下に「?>」があればそれの一つ上の段に、よくわからなければ一番下の行から2行ぐらい改行を入れて下記をコピー&ペーストしてください。

 

<?php
//ユーザー権限に対して管理画面サイドナビ表示設定
function remove_menus () {
global $menu;

//権限aのメニュー設定
if ( current_user_can('権限aスラッグ名') ) {
$restricted1 = array(
__('非表示にするメニュー名'),
__('非表示にするメニュー名')
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted1)){
unset($menu[key($menu)]);
}
}
}

//権限bメニュー設定
if ( current_user_can('権限bスラッグ名') ) {
$restricted2 = array(
__('非表示にするメニュー名')
);
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted2)){
unset($menu[key($menu)]);
}
}
}

}
add_action('admin_menu', 'remove_menus');
?>

 

コピー&ペーストをしたら、「権限のスラッグ名」を入力してください。
権限のスラッグは下記を参考に管理画面の「ユーザー」より確認して該当のスラッグ名(下記の「」内の英表記)を入力してください。

 

WordPressユーザー権限と出来ること

 

  • 管理者「Administrator」
    すべての機能を操作することができます。
  • 編集者「Editor」
    記事投稿、固定ページ作成、記事管理、固定ページ管理、メディア(アップロード)管理
    カテゴリー管理、コメント管理、リンク管理、プロフィール編集
  • 投稿者「Author」
    記事投稿、記事管理、コメント管理、メディア(アップロード)管理、プロフィール編集
  • 寄稿者「Contributor」
    記事投稿(公開権限なし)、記事管理(公開承認後は変更できない)、プロフィール編集
  • 購読者「Subsriber」
    プロフィール編集

 

次に「非表示にするメニュー名」は管理画面のサイドメニューに表示されいている名前です。

例えば「ダッシュボード」メニューを非表示にしたければ

「__(‘非表示にするメニュー名’)」「__(‘ダッシュボード’)」と入力します。

注意点はシングルクウォーテーション「’」の間に入力してください。(「権限のスラッグ名」も同様です。)

もう一つ注意点があります。

非表示にするメニューが1つだけの場合は

「__('非表示にするメニュー名')」

と記述し、2つ以上の場合は

 

__('非表示にするメニュー名'),
__('非表示にするメニュー名'),
__('非表示にするメニュー名')

 

と記述します。要はコンマ「,」で区切ります。最後の「__(‘非表示にするメニュー名’)」の後ろにはコンマ「,」は入力しないでください。

 

以上で「ユーザー権限別にサイドメニューの非表示設定」の完了です。

 

2,ユーザー別サイドメニューの非表示設定


//ユーザーに対して管理画面サイドナビ表示設定
function remove_menus () {
global $menu;
global $current_user;
get_currentuserinfo();

//ユーザーaメニュー設定
if($current_user -> user_login == 'ユーザー名') {
$restricted1 = array(
__('非表示にするメニュー名'),
__('非表示にするメニュー名')
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted1)){
unset($menu[key($menu)]);
}
}
}

//ユーザーbメニュー設定
if($current_user -> user_login == 'ユーザー名') {
$restricted2 = array(
__('非表示にするメニュー名'),
__('非表示にするメニュー名')
);
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted2)){
unset($menu[key($menu)]);
}
}
}

}
add_action('admin_menu', 'remove_menus');

前項の「ユーザー権限別サイドメニューの非表示設定」とほぼ同じです。

「ユーザー名」はユーザー登録の時に決めたユーザー名です。

「__(‘非表示にするメニュー名’)」は前項と同じです。

 

これでサイドメニューの非表示設定が完了しました。

会員系サイトじゃない場合やユーザーが大量に存在しない場合ユーザー名別で非表示設定を行うと便利かもしれないですね。

会員系サイトユーザーが大量に存在する場合

「User Role Editor」プラグイン

を使用してユーザー権限別で非表示設定を行うのがいいでしょう。

「User Role Editor」プラグインとは上記で説明した「ユーザー権限と出来ること」とは別に「オリジナル権限」を作成することが出来るプラグインです。

このプラグインとユーザー権限別の非表示設定を組み合わせることで、会員ランク別にカスタマイズすることもできます。

「User Role Editor」プラグインについては、改めて書こうと思います。

 

 

少しは参考になったでしょうか?

少しづつWordPressをカスタマイズして使いやすい理想のウェブサイト作成のお手伝いが出来ればと思います。

 

では

WebsiteEngineerでした。

コメントを残す

メールアドレスが公開されることはありません。