# API des menus

> Ensemble de fonctions WordPress permettant à un thème ou une extension d'enregistrer des emplacements de menu et d'afficher les menus de navigation choisis par l'administrateur.

- Auteur : Clément Hadrot
- Publié le : 2026-09-25
- Mis à jour le : 2026-09-25
- URL : https://wpmoderne.dev.wordpress-developpement.fr/lexique/api-des-menus/

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'option `fallback_cb` est 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.
