管理メニュー全体を削除する方法は?


14

ユーザーの管理パネルをカスタマイズする必要があります。では、管理メニュー全体を削除するにはどうすればよいですか?メニュー項目を削除するのではなく、左の垂直メニューバーを完全に削除し、メニューのデザイン(css、background..etcなど)を含めます。空白にしたいです。

私はCSSハックでそれを行うことができます。しかし、私はそれを行うためにフックを使用することを好みます。何か案は?

ありがとう


私は興味がある。ユーザーが管理メニュー項目にアクセスする必要がない場合、なぜダッシュボードにアクセスする必要があるのですか?
モラレイダ

動機について疑問に思う...特定の役割/ユーザーに対してそれを隠しますか?カスタムの管理バーメニュー(上部)を作成していますか?
ブラソフィロ

1
はい、管理メニューをカスタマイズします。現在の管理メニューが十分ではないというわけではなく、「ワードプレス」の感覚が強すぎます。私の意見では、ブランディングには向いていません。
DEV-ジム

ここで以前の回答を確認してください。wordpress.stackexchange.com/questions/136058/...
numediaweb

回答:


16

使用する正しいフックはadmin_menu、削除するメニューを削除する関数を作成することです。次の2つの関数は、すべてのメニューを削除します。

add_action( 'admin_menu', 'remove_admin_menus' );
add_action( 'admin_menu', 'remove_admin_submenus' );

//Remove top level admin menus
function remove_admin_menus() {
    remove_menu_page( 'edit-comments.php' );
    remove_menu_page( 'link-manager.php' );
    remove_menu_page( 'tools.php' );
    remove_menu_page( 'plugins.php' );
    remove_menu_page( 'users.php' );
    remove_menu_page( 'options-general.php' );
    remove_menu_page( 'upload.php' );
    remove_menu_page( 'edit.php' );
    remove_menu_page( 'edit.php?post_type=page' );
    remove_menu_page( 'themes.php' );
}


//Remove sub level admin menus
function remove_admin_submenus() {
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'themes.php', 'themes.php' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    remove_submenu_page( 'edit.php', 'post-new.php' );
    remove_submenu_page( 'themes.php', 'nav-menus.php' );
    remove_submenu_page( 'themes.php', 'widgets.php' );
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-install.php' );
    remove_submenu_page( 'users.php', 'users.php' );
    remove_submenu_page( 'users.php', 'user-new.php' );
    remove_submenu_page( 'upload.php', 'media-new.php' );
    remove_submenu_page( 'options-general.php', 'options-writing.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-reading.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-media.php' );
    remove_submenu_page( 'options-general.php', 'options-privacy.php' );
    remove_submenu_page( 'options-general.php', 'options-permalinks.php' );
    remove_submenu_page( 'index.php', 'update-core.php' );
}

上記の2つの機能を使用した左メニューのスクリーンショット:

ここに画像の説明を入力してください


3
を使用して別の方法を見つけました$GLOBALS['menu'] = array();。配列にnullを指定することもできます。
DEV-ジム

これはどこに置きますか?

そのスクリーンショットの最近の下書きに気づいた人はいませんか?;)
acSlater

5

/wp-admin/admin-header.php-> のリードに続いて、/wp-admin/menu-header.phpそれを行うフックはありません。

解決策は、admin_headCSS + jQuery をフックして実行することです

add_action('admin_head', 'wpse_52099_script_enqueuer');
function wpse_52099_script_enqueuer(){
    if(!current_user_can('administrator')) {
        echo <<<HTML
        <style type="text/css">
        #wpcontent, #footer { margin-left: 0px; }
        </style>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#adminmenuback, #adminmenuwrap').remove();
        });     
        </script>
HTML;
    }
}

[更新]
動機が管理領域をブランディングしていることが明らかになる質問の明確化に従って、これらに私が使用する4つのプラグインがあります。


このルートを使用する場合wp_enqueue_script()admin_enqueue_scriptフックで使用する方が理にかなっています。
-mrwweb

1
@mrwwebこんなに小さな挿入であっても?あなたは価値があると思いますか?
ブラソフィロ

同意した。小さなスクリプト/スタイルの挿入は、を使用してより簡単に実行できadmin_headます。
chrisguitarguy

他に選択肢がない限り、jqueryを使用するのは好きではありません。訪問者がブラウザでJavaScriptを無効にするとどうなりますか?ただし、発生する可能性はありませんが、可能性はあります。とにかくアドバイスをありがとう。
dev-jim

私の例では、CSSの2つのdivも非表示にすることで、二重に削除する必要があります。
ブラソフィロ

2

私が知っている唯一のフックフレンドリーな方法はremove_menu_page()、すべてのメニュー項目に使用することです。それでも、左のバー自体に何が起こるかはわかりません(幅が0pxに縮小するかどうか)。フックを使用していても、ある時点で管理スタイルシートをキューに入れて、メニューマークアップスタイルの残りをクリーンアップすることを想像します。

これには注意が必要です。たとえば、「設定」を削除すると、「設定」メニューにメニューページを作成するプラグインにアクセスできなくなります。一般的に、メニューを完全に削除することは本当に持続可能かと思います。


彼は管理者ではなく通常のユーザーのメニューを削除する方法を探していたと確信しています。:)
クリスティーンクーパー

1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}

この答えも非常に便利です。プラグインによって作成されたメニューページを除き、短くて魅力のように機能します。(管理者にのみ表示されるため、これは問題ではないはずです)
チャールズ

これは手ごろな解決策ですが、実際には、これらの管理ページへのアクセスを実際にブロックするのではなく、管理バーで非表示にするだけです。もちろん、アイテムを非表示にするためのCSSソリューションよりも優れていますが、セキュリティの点で依然として欠陥があります。サビのユーザーは、URLを編集することで管理ページに直接アクセスできます。
マルコスBuarque

0

@brasofiloには小さなバグがあるため、ソリューションを改善します。ページをリロードすると、インターネット接続メニューが最適ではないため、非常に短時間表示されます。それを避けるために、CSSをもう少し追加しました。

add_action('admin_head', 'wpse_52099_script_enqueuer');

function wpse_52099_script_enqueuer() {

    if(!current_user_can('administrator')) { 

echo <<<HTML
<style type="text/css">
#wpcontent, #footer { margin-left: 0px !important; }
#adminmenuback, #adminmenuwrap { display: none !important; }
</style>
<script type="text/javascript">
jQuery(document).ready( function($) {
    $('#adminmenuback, #adminmenuwrap').remove();
});
</script>
HTML;

    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.