Masquer les menus d’administration dans le back office de WordPress

32 commentaires
Masquer les menus d’administration dans le back office de WordPress
Certains menus du tableau d'administration de WordPress ne présentent aucune utilité pour votre projet et / ou votre client ?

Il existe une astuce simple et rapide permettant de masquer à la demande les menus de votre choix et ce, sans modifier un seul fichier du cœur de WordPress. Une méthode bien plus propre qu’un simple masquage via le CSS.

Une fois n’est pas coutume, nous allons intervenir dans le fichier functions.php de votre thème. Rendez-vous dans le menu Apparence puis Éditeur. Dans la liste de droite, cliquez sur le fichier concerné.

Masquer les menus parents de l’administration de WordPress

Ajoutez ensuite les lignes de code suivante pour désactiver les menus de votre choix contenus dans la variable $restricted :

function remove_menu_items() {
global $menu;
$restricted = array(__('Links'), __('Comments'), __('Media'),
__('Plugins'), __('Tools'), __('Users'));
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_menu_items');

L’exemple peut donc facilement être personnalisé en ajoutant des valeurs ou en supprimant certaines. Un exemple pour masquer les articles et les pages – utile si vous n’utilisez que des custom post types :

function remove_menu_items() {
global $menu;
$restricted = array(__('Posts'), __('Pages'));
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_menu_items');

Masquer les sous-menus de l’administration de WordPress

function wpc_dashboard_widgets() {
remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal'); // Recent Comments
remove_meta_box('dashboard_incoming_links', 'dashboard', 'normal'); // Incoming Links
remove_meta_box('dashboard_plugins', 'dashboard', 'normal'); // Plugins
remove_meta_box('dashboard_quick_press', 'dashboard', 'side'); // Quick Press
remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side'); // Recent Drafts
remove_meta_box('dashboard_primary', 'dashboard', 'side'); // WordPress blog
remove_meta_box('dashboard_secondary', 'dashboard', 'side'); // Other WordPress News
}
add_action('wp_dashboard_setup', 'wpc_dashboard_widgets');

Comme vous pouvez le remarquer des numéros figurent entre les crochets. Ces numéros sont déterminés par des fichiers issus du cœur de WordPress. Il s’agit du fichier menu.php dans le dossier /wp-admin. Il suffit d’identifier le fichier PHP et son numéro associé pour masquer les éléments de sous-menus de votre choix.

WordPress démontre une fois sa flexibilité pour créer des projets Web 100% sur-mesure.

Par Aurélien Denis

Consultant & Développeur WordPress / WooCommerce. Un site à créer, à maintenir ou à débuguer ? Contactez-moi.

32 commentaires
  1. Philip

    Bonsoir Aurélien, bonsoir à tous,

    je me casse les dents pour supprimer les sous-menus « Etat » et « Extensions » de l’onglet woocommerce.
    S’il est encore assez aisé de supprimer les menus (pour peu qu’on trouve la bonne commande…) ça se complique singulièrement pour les sous-menus.
    Certains utilitaires comme « Adminize » sont bien pratiques, mais farcis de bugs (certaines restrictions ne sont pas suivies d’effets…). Aussi, où trouver les commandes à entrer dans les exemples de programmes que vous proposez ?
    Genre « dashboard_quick_press » :
    remove_meta_box(‘ ??????? ‘, ‘dashboard’, ‘normal’);
    et aussi, quelle commande terminale passer : « side ? » « normal ? » « anormal 🙂 ? »

    Merci par avance pour la suite donnée.
    Bien cordialement.
    Philip

  2. josé

    j’ai vu sur un site le code suivant permettant de faire la meme chose, c’est ressemblant mais pas de numeros entre crochets

    add_action( ‘admin_menu’, ‘remove_links_tab_menu_pages’ );
    function remove_links_tab_menu_pages() {

    //Pour supprimer l’onglet Articles :
    remove_menu_page(‘edit.php’);
    //Pour supprimer l’onglet Médias :
    remove_menu_page(‘upload.php’);
    //Pour supprimer l’onglet Commentaires :
    remove_menu_page(‘edit-comments.php’);
    //Pour supprimer l’onglet Apparence :
    remove_menu_page(‘themes.php’);
    //Pour supprimer l’onglet Extensions :
    remove_menu_page(‘plugins.php’);
    //Pour supprimer l’onglet Utilisateurs :
    remove_menu_page(‘users.php’);
    //Pour supprimer l’onglet Outils :
    remove_menu_page(‘tools.php’);
    //Pour supprimer l’onglet Réglages :
    remove_menu_page(‘options-general.php’);

    }

    ?>

    1. Aurélien Denis auteur de l’article

      Oui cela devrait fonctionner également, c’est d’ailleurs plus récent comme code ! 🙂

  3. vww3

    Bonjour,

    Je vous remercie infiniment pour ce tuto qui est plus qu’utile. Cela permet de rendre un site beaucoup plus simple, épuré et le client ne pourra ainsi pas tout changer.

    Par contre, j’ai des plugins tels que ContactForm7 ou ACF. Comment trouver l’équivalence pour les dissimuler également ?

    Merci d’avance !

  4. Cédric - bécane WEB

    Bonjour Aurélien,

    Pour cacher les menus de la barre latérale, j’ai trouvé sur le net le code suivant :

    remove_menu_page(‘edit.php’); //Section Articles

    Qu’en penses-tu ? Je ne m’y connais pas en php, cette fonction a t-elle le même résultat que ce que tu proposes sur ce tuto ?

    Merci pour tes tutos, toujours supers

  5. Cédric

    Bonjour, encore un super tuto, merci Aurélien.

    J’ai juste un petit problème pour connaître les numéros des divers menus. Une solution ?

    Merci pour ton travail

    1. becaneweb

      J’ai trouvé ma réponse comme il est écrit plus haut dans ce tuto, il s’agit d’ouvrir le fichier menu.php dans le dossier /wp-admin.

      J’ai juste eu qqs difficultés à cacher l’onglet Editeur du menu Apparence qui semble un peu différent des autres onglets.

      J’ai donc ajouter le code suivant pour ce faire :

      add_action( 'admin_menu', 'adjust_the_wp_menu', 999 );
      function adjust_the_wp_menu() {
      $page = remove_submenu_page( 'themes.php', 'theme-editor.php' ); //Menu Edition de theme
      }

  6. Abdechakour Mrabet

    Bonjour,

    D’abord je vous remercie pour vos efforts, je trouve vos articles très intéressants

    J’ai une petite question : Après avoir masquer un élément de menu par exemple <>, comment interdire l’accès en tapant son url dans la barre d’adresse par exemple : <> ?

    1. Aurélien Denis auteur de l’article

      Le plus simple pour cela est d’utiliser un plugin de gestion de rôles ou de coder un peu dans le fichier functions.php ou via un mu-plugins.

  7. Lomic

    Bonsoir,

    je cherche à masquer l’item “Tableau de bord” et l’item “Profil” pour l’utilisateur abonné. De fait, il ne lui restera que le seul item dont il a besoin dans mon cas, qui est un item personnalisé ajouté avec add_action(‘admin_menu’, ‘mon_item’);

    connaissant la liste complète des numéros de mes divers menus et sous-menus, j’ai tenté d’ajouter un unset($menu[2]); pour retirer le tableau de bord comme ça : (dans functions.php)

    if ( !current_user_can(‘manage_options’) ) {
    function custom_admin_menu() {
    global $menu;
    unset($menu[2]);
    unset($menu[6]);
    }
    add_action(‘admin_menu’, ‘custom_admin_menu’, 11);
    }

    et je pense que le profil dans le cas d’un abonné vient du menu “Utilisateurs” et notamment son sous-menu lié à profile.php, menu utilisateur qui porte le numéro 6 dans mon cas, raison pour laquelle j’ai retiré le 6 également.

    mais ça ne passe pas, “Tableau de bord” et “Profil” restent fidèles au poste grrrrrr….

    Si quelqu’un a une idée, je prend 😉

    Lomic

  8. daz

    Salut je me retrouve avec une erreur bizarre et même en enlèvent le bout de code cela ne fonctionne plus 🙁 j’ai même remis le fonction.php d’origine et toujours la même erreur.

    Fatal error: Cannot redeclare remove_menu_items() (previously declared in SUPPRIMER PAR MODERATION in SUPPRIMER PAR MODERATION on line 28

    Merci pour ton aide. Et bravo pour ton blog il est extra 🙂

    1. daz

      Résolu merci.

    2. Aurélien Denis auteur de l’article

      Il y a sans doute un autre fichier qui coince notamment ligne 28. 😉

  9. Luc

    Et pour à l’inverse, ajouter des possibilités via le functions.php ? ça se passe comment?
    Cas régulier (curieux qu’il ne soit pas compris par défaut), je veux rendre accessible le menu personnalisé (apparence>menu) aux éditeurs d’un site.
    Je fais comment ?

  10. Christophe BENOIT

    Super, j’ai réussi à masquer les articles, les liens et les commentaires pour un site institutionnel basique.

  11. Loic

    Bonjour.
    Merci pour cet article très intéressant.
    Une fois les menus du tableau de bord masqués, il reste les bordures des menus masqués (la classe “wp-not-current-submenu wp-menu-separator”).
    Comment faire pour masquer les items de liste des menus masqués ?

    1. Aurélien Denis auteur de l’article

      Hum bizarre je n’ai jamais remarqué cela… tu peux envoyer une capture que l’on voit ?

  12. ben

    Hello, article intéressant. Pour ma part, utilisant un plugin de selection de droits (capsman) et en ayant essayé d’autres. Il manque une chose que je ne parviens pas non plus à faire avec ton bout de script. c’est masquer les sous menus de “edit_theme_options” excepté le “menu” de manière à ce que le rôle choisi ne puisse que modifier son menu et rien d’autre. avec ton code, je n’ai pas pu isoler cela, et je cherche encore. bout de code à ajouter aussi dans functions.php du thème child avec une condition du genre : if ($current_user->roles[0] == “monRoleDefini”)
    si quelqu’un connait une solution.
    merci à tous , merci à WPchannel 🙂

  13. luc

    Autre chose, si j’ai bien compris il ne faut pas mettre le fichier fonctions.php dans un theme enfant.
    Ce qui veut donc dire qu’en cas de mise à jour du thème il faut une svg du fichier ?
    Pas top…

    1. Aurélien Denis auteur de l’article

      Si tu mets un fichier functions.php dans un thème enfant, celui sera appelé avant celui du thème parent.

  14. luc

    Bonjour, je ne connaissais pas le plugin adminimize qui semble simple, entre autre pour gérer l’admin selon le rôle de chaque utilisateur. En revanche, c’est dommage qu’il ne fasse qu’enlever des droits et qu’il ne soit pas possible d’en ajouter également. Par exemple j’ai un plugin de galerie d’image qui n’est pas accessible avec le rôle d’éditeur. Pour le faire je connais le plugin role-manager, mais tout ça fait des plugin en plus, qui font un peu doublon et qui alourdissent le site.
    La solution d’Aurélien d’entrer le code dans le fonction.php est du coup bonne, sauf pour la gestion des rôles…

  15. Gilles

    Intéressant Aurélien.
    J’utilise moi aussi un plu ginpour ça, qui s’appelle WPlite.
    Il n’a plus l’air maintenu depuis un certain temps mais fonctionne bien.

    Dans ton tuto, l’idéal serait de rajouter une condition sur le statut du user connecté, de sorte par exemple qu’un admin voit tous les menus mais pas un éditeur.

  16. luc

    Merci Aurélien !
    Ce tuto manquait sérieusement sur le net.

    1. Aurélien Denis auteur de l’article

      Avec plaisir ! 😎

  17. Cristophe

    Mouais… À quand une interface où il suffira de cocher ce que nous voulons voir ou non ?

    1. Cybercraft

      Il faudra toujours des développeurs pour développer les case à cocher… Et il y aura toujours des magouilles de ce style pour toujours répondre aux attentes du client.

      @wpchannel : Super tuto 🙂

    2. Aurélien Denis auteur de l’article

      C’est effectivement impossible : les besoins des clients sont innombrables et le sur-mesure en natif n’existera jamais à moins de créer une usine à gaz monumentale qui ne satisfera personne…

      1. Jérémy

        Je suis d’accord avec le fait qu’afin de satisfaire l’ensemble des utilisateurs et de leur laisser le maximum de choix dans la personnalisation, un CMS ne doit pas tout gérer en natif. Certaines fonctionnalités doivent être gérées uniquement par les plugins.

        Toutefois, je trouve que l’idée de Cristophe est bonne et il est possible de l’implémenter en natif à WordPress sans en faire une usine à gaz. C’est d’ailleurs même précisément le contraire qui se produit, puisqu’il s’agit de permettre aux utilisateurs d’alléger leur back office. Et il suffit de quelques options supplémentaires dans WordPress pour gérer ça.

        J’ai moi-même implémenté cette idée dans 2 de mes plugins. Ils possèdent chacun plusieurs pages d’admin et pas mal de fonctionnalités, mais je souhaite satisfaire un large panel d’utilisateurs, y compris ceux qui ne souhaitent utiliser qu’un nombre limité de fonctionnalités.

        Alors j’ai créé pour chacun de ces plugins une page d’admin intitulée Back office qui leur permet de personnaliser l’interface. Ils peuvent personnaliser leur menu de navigation, décider de ne pas afficher certaines pages d’admin ainsi que certains éléments à l’intérieur de ces pages.

        Le but étant d’améliorer l’ergonomie en offrant à l’utilisateur une interface qui colle au plus près à ses besoins.

    3. Le Marroneur

      Euh… Sinon il existe aussi “Adminimize”, qui permet de faire cela en quelques clics, sans avoir à tout recommencer le jour où on change de thème. C’est un plugin que j’utilise déjà depuis très longtemps, et rien de plus simple.

      1. Aurélien Denis auteur de l’article

        Tu peux aussi créer un plugin WordPress qui contiendra des fonctions qui ne sont pas liées au thème. Malheureusement, impossible de mettre la main sur l’article qui en parlait. Mais cela n’est guère compliqué, il suffit d’indiquer les quelques lignes indiquant à WordPress qu’il s’agit d’un plugin et ça devrait le faire… au pire j’en ferais un tuto !

Laisser un commentaire