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]);
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
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.
Comment installer Google Analytics sur WordPress et disposer d’un widget dans votre tableau de bord : la réponse dans ce tutoriel pour déployer efficacement…
Véritable outil de blogging par excellence, WordPress va encore plus loin en étant capable d’intégrer des forums en complément de votre blog.
32 commentaires
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
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 ?
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 : <> ?
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….
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 🙂
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 ?
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 ?
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 🙂
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…
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…
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.
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.
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 !
WordPress dispose de fonctionnalités de mises à jour automatiques pour le cœur, les extensions et les thèmes. Ce guide vous apprend comment désactiver ces…
Migrer du contenu multilingue avec des médias depuis une ancienne technologie vers un nouveau site WordPress doté d’une architecture personnalisée : tel est le…
Avec des milliers de thèmes disponibles, le choix d’un thème WordPress pour votre site professionnel ou personnel est une étape cruciale. Évitez les nombreux…
Charger les polices Google depuis votre propre serveur vous offrira de meilleures performances et un respect de la vie privée de vos visiteurs. Explications…
Découvrez les extensions WordPress qui allient l’intelligence artificielle pour vous aider à générer du contenu de qualité en un rien de temps. L’IA au…
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
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’);
}
?>
Oui cela devrait fonctionner également, c’est d’ailleurs plus récent comme code ! 🙂
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 !
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
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
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
}
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 : <> ?
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.
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
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 🙂
Résolu merci.
Il y a sans doute un autre fichier qui coince notamment ligne 28. 😉
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 ?
Super, j’ai réussi à masquer les articles, les liens et les commentaires pour un site institutionnel basique.
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 ?
Hum bizarre je n’ai jamais remarqué cela… tu peux envoyer une capture que l’on voit ?
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 🙂
Bonjour Ben, pour la gestion des menus et des sous-menus d’admin, j’utilise ce snippet avec la fonction native remove_menu_page et remove_submenu_page :
http://justintadlock.com/archives/2011/06/13/removing-menu-pages-from-the-wordpress-admin
ça marche très bien!
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…
Si tu mets un fichier functions.php dans un thème enfant, celui sera appelé avant celui du thème parent.
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…
Cela doit être possible avec des conditionnals tags et la gestion des rôles de WordPress : http://codex.wordpress.org/Function_Reference/current_user_can
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.
Merci Aurélien !
Ce tuto manquait sérieusement sur le net.
Avec plaisir ! 😎
Mouais… À quand une interface où il suffira de cocher ce que nous voulons voir ou non ?
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 !