menu-restaurant

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

24 commentaires

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

    Laisser un commentaire