Filtrer les éléments de menu sous WordPress
Sous WordPress, il est courant de vouloir afficher un élément de menu uniquement pour un profil donné. Dans cet article, je montre comment activer un menu nommé AdminOnly
seulement lorsqu’un compte administrateur est connecté.
J’utilise le hook wp_nav_menu_objects
qui permet de filtrer la liste des éléments du menu juste avant sa génération en HTML.
Sa définition précise :
apply_filters( 'wp_nav_menu_objects', array $sorted_menu_items, stdClass $args )
Voici ce que contient la variable $sorted_menu_items
pour l’élément en question, dans mon cas illustré ci-dessus :
Le code intégral
La solution consiste à supprimer cet élément du tableau si le rôle souhaité n’est pas connecté. Dans mon cas, le rôle WordPress concerné est simplement administrator
.
Lors de l’appel de wp_nav_menu_objects
, je vérifie qu’il est question du bon menu : main-menu
.
Dans mon exemple de site très simple, je n’ai qu’un seul menu actif. Mais ce n’est pas le cas sur la plupart des sites qui peuvent avoir plusieurs autres menus; dans une barre du haut pour des informations de contact, ou dans un pied de page pour les mentions légales…
La vérification est appliquée ici sur le post_title
en utilisant directement le titre du menu. Il est possible d’utiliser également le post_name
qui contiendrait le slug
, ce qui peut s’avérer plus précis si le titre contient des caractères spéciaux par exemple.