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

Sukellos WordPress CSS

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 :

Copier

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.

Copier

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.

Quelques liens pour approfondir

Besoin d’une assistance technique par un expert WordPress ?
Optez pour un crédit temps de quelques heures

Laisser un commentaire