Quand un thème propose plusieurs zones de navigation (menu principal, menu de pied de page, menu mobile), il a besoin d’un moyen standard de dire « voici les emplacements disponibles » sans que l’utilisateur touche au code. C’est exactement le rôle de cette API : elle sépare la structure du menu (gérée dans l’administration) de son affichage (géré par le thème).
Enregistrer un emplacement
Un thème déclare ses emplacements avec register_nav_menus(), généralement dans le fichier functions.php, en associant un identifiant technique à un libellé lisible :
register_nav_menus( array(
'menu-principal' => __( 'Menu principal', 'mon-theme' ),
'menu-pied' => __( 'Menu de pied de page', 'mon-theme' ),
) );
Ces libellés apparaissent ensuite dans Apparence > Menus, où l’administrateur associe librement un menu créé à chaque emplacement. Pour afficher le résultat dans un gabarit, on appelle wp_nav_menu() en précisant le theme_location correspondant.
Personnaliser le rendu
Le HTML généré peut être ajusté via des filtres comme wp_nav_menu_args ou nav_menu_link_attributes, ou en fournissant un « walker » personnalisé (une classe qui étend Walker_Nav_Menu) quand la structure par défaut ne convient pas, par exemple pour un méga-menu.
Bon à savoir
- Si aucun menu n’est assigné à un emplacement,
wp_nav_menu()peut afficher un menu de secours basé sur les pages, sauf si l’optionfallback_cbest désactivée. - Un même menu peut être assigné à plusieurs emplacements à la fois.
- Les éléments de menu peuvent recevoir des classes CSS personnalisées depuis l’écran d’édition, une fois l’option « Classes CSS » activée dans les options d’écran.