Comment supprimer tout le menu administrateur?

14

J'ai besoin de personnaliser le panneau d'administration pour mon utilisateur. Alors, comment puis-je supprimer l'intégralité du menu d'administration? Ne pas supprimer l'élément de menu, je veux dire supprimer complètement la barre de menu verticale de gauche, inclure la conception du menu (par exemple, css, background..etc). Je veux qu'il devienne vide.

Je peux le faire par hack css. Mais je préfère utiliser le crochet pour le faire. Des idées?

Merci

dev-jim
la source
Je suis curieux. Si vos utilisateurs n'ont pas besoin d'accéder à l'un des éléments du menu d'administration, pourquoi ont-ils besoin d'accéder au tableau de bord?
Moralida
Vous vous demandez les motifs ... Voulez-vous le cacher pour des rôles / utilisateurs spécifiques? Créez-vous un menu de barre d'administration personnalisé (en haut)?
brasofilo
1
Oui, je souhaite personnaliser le menu d'administration. Non pas que le menu d'administration actuel ne soit pas assez bon, mais trop "wordpress". Pas bon pour la marque, à mon avis.
dev-jim
Veuillez vérifier ma réponse précédente ici; wordpress.stackexchange.com/questions/136058/…
numediaweb

Réponses:

16

Le crochet correct à utiliser est admin_menupuis créez une fonction pour supprimer les menus que vous souhaitez supprimer. Les 2 fonctions suivantes suppriment tous les menus.

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

Capture d'écran du menu de gauche utilisant les 2 fonctions ci-dessus:

entrez la description de l'image ici

Chris_O
la source
3
J'ai trouvé un autre moyen en utilisant $GLOBALS['menu'] = array();. Donner null dans le tableau fera également le travail.
dev-jim
Où mettez-vous cela?
Quelqu'un a remarqué les brouillons récents de cette capture d'écran? ;)
acSlater
5

Suivant l'exemple de /wp-admin/admin-header.php -> /wp-admin/menu-header.phpil n'y a pas de crochet pour le faire.

Une solution est de se connecter admin_headet de faire du CSS + 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;
    }
}

[mise à jour]
Selon une clarification de la question, où il devient clair que la motivation est l' image de marque la zone d'administration, voici les 4 plugins que j'utilise pour cela:

  • Administrer (masquer de gros morceaux d'interface WordPress, filtrer par rôle)
  • Menu déroulant Admin Ozh ' (tous les menus d'administration dans un menu déroulant horizontal piloté par CSS)
  • Menus administrateur fixes (compagnon idéal pour Ozh)
  • Admin Tweaks (je suis l'auteur de celui-ci, et son objectif principal est de personnaliser de nombreuses zones de l'interface d'administration)
brasofilo
la source
Si vous suivez cette voie, il est plus judicieux de l'utiliser wp_enqueue_script()avec un admin_enqueue_scriptcrochet.
mrwweb
1
@mrwweb Même quand c'est une si petite insertion? Pensez-vous que cela en vaut la peine?
brasofilo
D'accord. Les petites insertions de script / style sont plus faciles à faire admin_head.
chrisguitarguy
Je n'aime pas utiliser le jquery sauf si je n'ai pas d'autre choix. Et si les visiteurs désactivent le javascript sur leur navigateur? Cependant, il est peu probable que cela se produise, mais il y a une possibilité là. Quoi qu'il en soit, merci pour les conseils.
dev-jim
Dans mon exemple, il s'agira de doubler la suppression en masquant également les 2 divs en CSS.
brasofilo
2

La seule façon conviviale que je connaisse est d'utiliser remove_menu_page() pour chaque élément de menu. Même alors, je ne sais pas ce qui arrive à la barre de gauche elle-même (si elle s'effondrerait à une largeur de 0 px ou quoi). Même avec l'utilisation des crochets, j'imagine qu'à un moment donné, vous voudrez mettre en file d'attente une feuille de style d'administration pour nettoyer ce qui reste des styles de balisage de menu.

Je serais prudent à ce sujet. Par exemple, si vous supprimez "Paramètres", tous les plugins qui créent des pages de menu dans le menu "Paramètres" ne seront pas accessibles. En général, je me demande à quel point il est durable de supprimer complètement le menu.

mrwweb
la source
Je suis sûr qu'il cherchait un moyen de supprimer le menu pour les utilisateurs réguliers, pas les administrateurs. :)
Christine Cooper
1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
kakoma
la source
Cette réponse est également très pratique. Il est court et fonctionne comme un charme, à l'exception des pages de menu créées par les plugins. (ce qui ne devrait pas être un problème car ils ne sont visibles que pour un administrateur)
Charles
C'est une solution pratique, en effet, MAIS il vaut la peine de dire qu'il ne bloquera pas réellement l'accès à ces pages d'administration, il les rendra simplement invisibles dans la barre d'administration. C'est mieux qu'une solution CSS pour cacher des éléments, bien sûr, mais toujours défectueuse en termes de sécurité: les utilisateurs avertis peuvent toujours accéder directement aux pages d'administration en modifiant l'URL.
Marcos Buarque
0

J'améliore la solution de @brasofilo car il y a un petit bug - sur la page, le rechargement avec le meilleur menu de connexion Internet n'apparaîtra que très brièvement. Pour l'éviter, j'ai ajouté un peu plus de 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;

    }
}
romapad
la source