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

31 commentaires

    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

      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.

    2. 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 !

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

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

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

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

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

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

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

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

  9. 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. 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
      }

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

  11. 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 !

  12. 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’);

    }

    ?>

Laisser un commentaire