menu-restaurant

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

add_action('admin_menu', 'remove_menu_items');
function remove_submenus() {
 global $submenu;
 unset($submenu['index.php'][10]); // Supprimer 'Mises à jour'.
 unset($submenu['themes.php'][5]); // Supprimer 'Thèmes'.
 unset($submenu['options-general.php'][15]); // Supprimer 'Ecriture'.
 unset($submenu['options-general.php'][25]); // Supprimer 'Commentaires'.
 unset($submenu['edit.php'][16]); // Supprimer 'Tags'.
 }
add_action('admin_menu', 'remove_submenus');

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.

Crédits photo : Dogra

Aurélien Denis est le fondateur du projet WordPress Channel proposant tutoriels et podcasts librement téléchargeables. En 2010, il fonde Neticpro, une agence Web spécialisée WordPress. Il est aussi co-fondateur du site Protuts.net (tutoriels PC/Mac/Linux) et community manager pour l’Imagine Cup 2011/2012, une compétition mondiale organisée par Microsoft.

17 commentaires

  1. Cristophe

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

    • 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 :)

    • 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…

      • 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.

    • 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.

      • 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 !

  2. luc

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

  3. 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.

  4. 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…

  5. 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…

  6. 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 :)

  7. 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 ?

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

Laisser un commentaire