お仕事でWordPressを使っていると、完成した物をクライアントに納品する際に管理画面をカスタマイズする必要があります。WordPressの事を知らないユーザーがブログ記事だけを書く為にログインしたのに、固定ページや外観のテンプレートを弄れる様になっていたら危険が危ないじゃん?
まぁ、「Admin Menu Editor」などのプラグインを使えば簡単に設定出来るんだけど、今回はfunctions.phpを使って非表示設定する方法を備忘録として掲載します。
管理画面のダッシュボードのカスタマイズについては以前の記事で書いているのでコチラを参照して下さい。[ad#ad-big]
目 次
左サイドバーメニューの非表示設定
まずは左サイドバーメニューの項目を非表示にする方法です。今回は編集者権限(editor)と寄稿者権限(contributor)がログインした時は「投稿」以外のメニューを非表示にする方法です。下のコードをfunctions.phpに記述して下さい。
function remove_menus () { if (current_user_can('editor') || current_user_can('contributor')) { global $menu; $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)]);} } } } add_action('admin_menu', 'remove_menus');
2行目の条件分岐で「editor(編集者)」と「contributor(寄稿者)」がログインした時のみに反映される様にします。そして、4行目のarrayに非表示にしたい項目名をそのまま記述すると非表示になります。今回は「投稿」のみを表示させたいので、その他のメニュー名をarrayに記述します。
すると、上画像の右端のように編集者権限(editor)と寄稿者権限(contributor)がログインした時のみ投稿以外が非表示になります。
左サイドバーメニューのサブメニューを非表示にする
お次は、メニュー内にあるサブメニューの中から不要な物だけを非表示にする方法。例えば投稿の場合、編集者(editor)権限のユーザーに記事の投稿と記事一覧は表示させたいけど、カテゴリーやタグは弄って欲しくないって時に便利です。
function remove_menu() { if (current_user_can('editor')) { remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category'); remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag'); } } add_action('admin_menu', 'remove_menu');
remove_submenu_page(‘edit.php‘, ‘edit-tags.php?taxonomy=category‘);
remove_submenu_page(‘edit.php‘, ‘edit-tags.php?taxonomy=post_tag‘);
とありますが、remove_submenu_pageはサブメニューを削除する関数です。edit.phpは親である「投稿」をクリックした時に表示されるページURLで、edit-tags.php?taxonomy=categoryはカテゴリーページ、edit-tags.php?taxonomy=post_tagはタグページのURLなので、これで「投稿」配下にある「カテゴリーページ」と「タグページ」が削除対象にセットされました。
同じ様に「外観」のサブメニュー「エディター」を非表示にしたい時は、
remove_submenu_page(‘themes.php‘, ‘theme-editor.php‘);
となります。
上記2つの非表示設定を組み合わせればほとんどのケースに対応できると思います。
寄稿者にも画像(メディア)をアップロード出来るようにする
寄稿者権限のユーザーは、ブログの投稿時に画像などのメディアをアップロードする事が出来ません。上の画像のように、寄稿者でログインしている時は「メディアを追加」ボタンが表示されていません。
しかし、記事の投稿に画像のアップロードは不可欠です。これもfunctions.phpに記述する事により解決することが出来ます。
if (current_user_can('contributor') && !current_user_can('upload_files')) { add_action('admin_init', 'allow_contributor_uploads'); } function allow_contributor_uploads() { $contributor = get_role('contributor'); $contributor->add_cap('upload_files'); }
投稿画面からカテゴリーやタグなどを非表示に
WordPressを納品後、クライアントがブログを投稿する事は良くある事です。その時に、投稿画面にカテゴリー、タグ、カスタムフィールド、リビジョン、スラッグなど弄って欲しくない物が表示されているのは都合が悪いですよね。基本的にWordPressだけでなく、ウェブ自体に不慣れな人間が更新を担当する可能性がある事を考慮しなければなりません。
右上にある「表示オプション」でも消せますが、下コードをfunctions.phpに張れば表示オプションからも消えるので間違いが置きません。カテゴリーなど表示しておきたい物があったら下のコードから削除すればOKです。
function remove_default_post_screen_metaboxes() { remove_meta_box('categorydiv','post','side'); //カテゴリー remove_meta_box('postcustom','post','normal'); //カスタムフィールド remove_meta_box('postexcerpt','post','normal'); //抜粋 remove_meta_box('commentsdiv','post','normal'); //コメント remove_meta_box('tagsdiv-post_tag','post','side'); //タグ remove_meta_box('trackbacksdiv','post','normal'); //トラックバック remove_meta_box('commentstatusdiv','post','normal'); //ディスカッション remove_meta_box('slugdiv','post','normal'); //スラッグ remove_meta_box('authordiv','post','normal'); //作成者 remove_meta_box('revisionsdiv','post','normal'); //リビジョン } add_action('admin_menu','remove_default_post_screen_metaboxes');
やっぱりプラグインが手っ取り早いかな?
管理画面のカスタマイズは、投稿画面からスラッグやリビジョンを非表示にしたりとまだまだ多岐に渡ります。functions.phpでカスタマイズするとプラグインをいろいろインストールしなくて良かったり、度々アップグレードしなくて良かったりとメリットも多いですが、やっぱり手間を考えるとプラグインの方が良いと思います(笑)。
そもそもfunctions.phpを下手に弄ってphpを間違えると、全ての画面が真っ白になってなーんも出来なくなってしまうからね。FTPソフトでサーバーを直接イジれない環境下ではfunctions.phpは絶対に弄らない様にしましょう。
有名所のプラグインだけチョット紹介します。
他にも沢山あると思うので、自分のやりたい事でググりまくって良いプラグインを見つけてくださいな。
COMMENTS:コメ無し(つд・)エーン
CATEGORY:WORDPRESSTAGS:wordpress