WordPressの勉強がてら

WordPressの初心者が独学でホームページ作成したときの技術メモ

WordPressの勉強がてら

管理画面(ダッシュボード)のメニューの表示/非表示を手動で操作する方法

      2015/04/21

Webサイト作成後、クライアントに引き渡すとき、管理画面から不要なメニューは表示させたくないと思います。プラグイン「Adminimize」、「User Role Editor」を使う方法もあるのですが、以前これらを使用し、動作がおかしくなったことがあったので使うのをやめました。ここでは functions.php にコードを追加して対応する方法をメモ。

 

案件内容

・クライアントは「編集者」権限で編集する。
・「管理者」権限意外は一部のメニューを非表示

 

「remove_menu_page」でメインメニューを削除

remove_menu_page関数を使えば簡単にメインメニューを非表示にすることができます。

下記のコードを何も考えずにfunctions.phpに追加してみます。

 function remove_menus() {
    remove_menu_page('index.php'); // ダッシュボード
    remove_menu_page('separator1'); // セパレータ1 (空間)
    remove_menu_page('edit.php'); // 投稿
    remove_menu_page('upload.php'); // メディア
    remove_menu_page('link-manager.php'); // リンク
    remove_menu_page('edit.php?post_type=page'); // 固定ページ
    remove_menu_page('edit-comments.php'); // コメント
    remove_menu_page('separator2'); // セパレータ2 (空間)
    remove_menu_page('themes.php'); // 外観
    remove_menu_page('plugins.php'); // プラグイン
    remove_menu_page('users.php'); // ユーザー
    remove_menu_page('tools.php'); // ツール
    remove_menu_page('options-general.php'); // 設定
    remove_menu_page('profile.php'); // プロフィール(管理者以外のユーザー用)
}
add_action('admin_menu', 'remove_menus');

すると、メニューが消えました。これを見るとなんとなく引数を指定すればメニューが消えることがわかります。

ではこの引数は何を指定すればいいの?

 

「remove_menu_page」の中身を見てみる

/wp-admin/includes/plugin.php にremove_menu_page があるので見てみると
function remove_menu_page( $menu_slug ) {
    global $menu;
    
    foreach ( $menu as $i => $item ) {
        if ( $menu_slug == $item[2] ) {
            unset( $menu[$i] );
            return $item;
        }
    }
     return false;
}

となっていて$menu配列の[2]の値と引数が一致したメニューを削除していることがわかります。 そこで、下記のようにして、$menuを表示させてみると、

global $menu;
echo "<pre>";
print_r($menu);
echo "</pre>";

以下のように表示されます。

Array
(
    [2] => Array
        (
            [0] => ダッシュボード
            [1] => read
            [2] => index.php
            [3] =>
            [4] => menu-top menu-top-first menu-icon-dashboard
            [5] => menu-dashboard
            [6] => dashicons-dashboard
        )

    [4] => Array
        (
            [0] =>
            [1] => read
            [2] => separator1
            [3] =>
            [4] => wp-menu-separator
        )

    [5] => Array
        (
            [0] => 投稿
            [1] => edit_posts
            [2] => edit.php
            [3] =>
            [4] => open-if-no-js menu-top menu-icon-post
            [5] => menu-posts
            [6] => dashicons-admin-post
        )
:
つづく

これを見て消したいメニュー名([0]がメニュー名)の[2]の値をremove_menu_pageの引数とすればそのメニューを削除することができます。

 

サブメニューを削除する

サブメニューのみを削除したい場合は remove_submenu_page 関数を指定します。

例)「投稿」メニューの「カテゴリー」「タグ」を削除する。

結論から言うと下記のコードです。

 function remove_menus() {
    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_menus');

 

この関数は、2つの引数を持っています。これもメインメニューと同じように $submenu の値を見てみます。関数の中身については割愛します。

global $submenu;
echo "<pre>";
print_r($submenu);
echo "</pre>";

すると、下記のように表示されます。


Array
(
    [index.php] => Array
        (
            [0] => Array
                (
                    [0] => ホーム
                    [1] => read
                    [2] => index.php
                )

            [10] => Array
                (
                    [0] => 更新 0
                    [1] => update_core
                    [2] => update-core.php
                )

        )

    [edit.php] => Array
        (
            [5] => Array
                (
                    [0] => 投稿一覧
                    [1] => edit_posts
                    [2] => edit.php
                )

            [10] => Array
                (
                    [0] => 新規追加
                    [1] => edit_posts
                    [2] => post-new.php
                )

            [15] => Array
                (
                    [0] => カテゴリー
                    [1] => manage_categories
                    [2] => edit-tags.php?taxonomy=category
                )

            [16] => Array
                (
                    [0] => タグ
                    [1] => manage_categories
                    [2] => edit-tags.php?taxonomy=post_tag
                )

        )
:
つづく

ということで、第一引数は$menuの該当するメニュー配列の[2]の値で、第2引数は、第一引数で指定した引数メニュー配列の[2]の値となります。

 

権限条件を追加する

最後に「管理者」以外はメニューを削除するように条件を追加してみます。私の場合、引き渡し時はクライアントのアカウントを「編集者」として引き渡すことが多いのでこのようにしてます。

 function remove_menus() {
    if ( !current_user_can('administrator') ){
        remove_menu_page('xxx');
        remove_submenu_page('xxx', 'xxx');
    }
}
add_action('admin_menu', 'remove_menus');

これで完了です。

 - WordPress

  • このエントリーをはてなブックマークに追加

  関連記事

wordpress情報
「Events Manager」で現在開催中のイベントを示すプレースホルダーを作成する

以前に「Events Manager」でオリジナルのプレースホルダーを追加するに …

wordpress情報
「Events Manager」プラグイン を使ってイベントカレンダーを作成する

「WordPress イベントカレンダー」で検索するといろんなイベントカレンダー …

wordpress情報
Contact Form 7の初期値をクエリストリングから取得する

お問い合わせフォームを作成するときよく使うプラグイン「Contact Form …

wordpress情報
特定のページのみSSLに対応させる

申し込みページに住所等の個人情報を入力する場合は、情報流出を防ぐためSSLを導入 …

wordpress情報
ショートコードやタグを登録して簡単に呼び出す

WordPressの記事を登録するときショートコードやタグなど手で打つのはめんど …

wordpress情報
ソースコードを投稿するプラグイン

ソースコードを投稿し綺麗に表示したい。でもCSSをつくるのは面倒。 でいろんな言 …

wordpress情報
ログイン画面のロゴを変更

クライアントに納品するようなサイトはWordPressのログイン画面のロゴをオリ …

wordpress情報
使用しているテンプレートファイル名を表示

WordPressのテーマを自分て作成しているとき現在表示されているのがどのテン …

wordpress情報
Contact Form 7をレスポンシブ対応する

お問い合わせフォームを作るときに定番のプラグイン「Contact Form 7」 …

wordpress情報
カスタムフィールドの値をOR条件で抽出

カスタム投稿を作成した時に、カスタムフィールドの条件をOR条件で抽出したかったり …