Tutoriels WordPress de confiance, quand vous en avez le plus besoin.
Guide du débutant pour WordPress
WPB Cup
25 millions+
Sites web utilisant nos plugins
16+
Années d'expérience WordPress
3000+
Tutoriels WordPress par des experts

Comment ajouter des descriptions de menu dans vos thèmes WordPress

WordPress menu system has a built-in feature where you can add descriptions with menu items. However, this feature is hidden by default. Even when enabled, displaying them is not supported without adding some code. Most themes are not designed with menu-item descriptions in mind. In this article we will show you how to enable menu descriptions in WordPress and how to add menu descriptions in your WordPress themes.

Comment ajouter des descriptions de menu dans les thèmes WordPress

Note: This tutorial requires you to have fair understanding of HTML, CSS, and WordPress theme development.

When and Why You Would Want to Add Menu Descriptions?

Some users think think that adding menu description will help with the SEO. However, we think that the main reason why you would want to use them is to offer a better user experience on your site.

Descriptions can be used to tell visitors what they will find if they clicked on a menu item. An intriguing description will attract more users to click on menus.

Descriptions de menu

Step 1: Turn on Menu Descriptions

Go to Appearance » Menus. Click on Screen Options button at top right corner of the page. Check the Descriptions box.

Activation des descriptions de menu dans WordPress

This will enable descriptions field in your menu items. Like this:

Champ de description ajouté aux éléments de menu

Now you can add menu descriptions to items in your WordPress menu. However, these descriptions will not yet appear in your themes. To display menu descriptions we will have to add some code.

Step 2: Add the walker class:

Walker class extends the existing class in WordPress. It basically just adds a line of code to display menu item descriptions. Add this code in your theme’s functions.php file.

class Menu_With_Description extends Walker_Nav_Menu {
	function start_el(&$output, $item, $depth, $args) {
		global $wp_query;
		$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
		
		$class_names = $value = '';

		$classes = empty( $item->classes ) ? array() : (array) $item->classes;

		$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
		$class_names = ' class="' . esc_attr( $class_names ) . '"';

		$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';

		$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
		$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
		$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
		$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';

		$item_output = $args->before;
		$item_output .= '<a'. $attributes .'>';
		$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
		$item_output .= '<br /><span class="sub">' . $item->description . '</span>';
		$item_output .= '</a>';
		$item_output .= $args->after;

		$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
	}
}

Step 3. Enable Walker in wp_nav_menu

Les thèmes WordPress utilisent la fonction wp_nav_menu() pour afficher les menus. Nous avons également publié un tutoriel pour les débutants sur la façon d'ajouter des menus de navigation personnalisés dans les thèmes WordPress. La plupart des thèmes WordPress ajoutent les menus dans le modèle header.php. Cependant, il est possible que votre thème ait utilisé un autre fichier de modèle pour afficher les menus.

Ce que nous devons faire maintenant, c'est trouver la fonction wp_nav_menu() dans votre thème (très probablement dans header.php) et la modifier comme ceci.

<?php $walker = new Menu_With_Description; ?>

<?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu', 'walker' => $walker ) ); ?>

Dans la première ligne, nous définissons $walker pour utiliser la classe walker que nous avons définie précédemment dans functions.php. Dans la deuxième ligne de code, le seul argument supplémentaire que nous devons ajouter à nos arguments wp_nav_menu existants est 'walker' => $walker.

Étape 4. Styliser les descriptions

La classe walker que nous avons ajoutée précédemment affiche les descriptions des éléments à cette ligne de code :

$item_output .= '<br /><span class="sub">' . $item->description . '</span>';

Le code ci-dessus ajoute un saut de ligne à l'élément de menu en ajoutant une balise
, puis encapsule vos descriptions dans une balise span avec la classe sub. Comme ceci :

<li id="menu-item-99" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://www.example.com/about/">About<br /><span class="sub">Who are we?</span></a></li>

Pour modifier l'apparence de vos descriptions sur votre site, vous pouvez ajouter du CSS dans la feuille de style de votre thème. Nous avons testé cela sur Twenty Twelve et avons utilisé ce CSS.

.menu-item {
border-left: 1px solid #ccc;
}

span.sub { 
font-style:italic;
font-size:small;
}

Nous espérons que cet article vous sera utile et vous aidera à créer des menus attrayants avec des descriptions de menu dans votre thème. Des questions ? Laissez-les dans les commentaires ci-dessous.

Ressources supplémentaires

Comment styliser les menus de navigation WordPress

Comment ajouter des éléments personnalisés à des menus WordPress spécifiques

Menus avec classe de description de Bill Erickson

Avis : Notre contenu est financé par nos lecteurs. Cela signifie que si vous cliquez sur certains de nos liens, nous pouvons percevoir une commission. Voir comment WPBeginner est financé, pourquoi c'est important et comment vous pouvez nous soutenir. Voici notre processus éditorial.

La boîte à outils WordPress ultime

Accédez GRATUITEMENT à notre boîte à outils - une collection de produits et de ressources liés à WordPress que tout professionnel devrait posséder !

Interactions des lecteurs

51 CommentsLeave a Reply

  1. Dans PHP 8.0 et supérieur, cela provoquera une erreur critique.

    Vous devez trouver cette ligne :
    function start_el( $output, $item, $depth, $args ) {

    Modifier cette ligne comme suit devrait faire disparaître l'erreur :
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

  2. Pour ajouter des descriptions de menu dans mes thèmes WordPress, j'ai suivi les étapes 1 et 2 de ce blog, mais je n'ai pas pu suivre l'étape 3 pour avancer et effectuer le changement total.

    • Si vous ne trouvez pas la fonction dans votre thème, nous vous recommandons de contacter le support de votre thème spécifique et ils devraient être en mesure de vous aider.

      Admin

  3. Bonjour,
    Comment désactiver la description de la catégorie de produits dans le menu max mega ?
    Je suis déjà allé dans Mega Menu > Paramètres généraux et j'ai défini les descriptions des éléments de menu sur désactivé, mais le problème persiste.

    • Vous devriez contacter le support du plugin et ils seraient en mesure de vous aider avec le paramètre qui ne fonctionne pas correctement.

      Admin

  4. Cela peut-il fonctionner avec le WP_Bootstrap_Navwalker ?

    car j'ai essayé et cela casse mon site....

  5. Bonjour.. S'il vous plaît, aidez-moi..
    Comment ajouter le titre de la catégorie, sans utiliser la description du titre de la catégorie ?

  6. Super astuce mais dans la description du menu, il ne prend pas en charge les balises html. Quelqu'un sait-il quelque chose à ce sujet ?

    Merci

  7. Salut les gars,

    Des idées sur la façon d'autoriser les balises html dans la description ?
    remove_filter(‘nav_menu_description’, ‘strip_tags’);
    celui-ci ne fonctionne pas pour moi.

    • @Iryna : Pouvez-vous poster votre code quelque part, par exemple sur pastebin.com.
      L'endroit où vous appelez remove_filter() déterminera s'il fonctionne – il doit être appelé après l'appel de add_filter().
      L'appeler juste avant l'appel de wp_nav_menu() pourrait fonctionner.

  8. merci… ça a fonctionné. mais dans la description du menu, il ne prend pas en charge les balises html.

  9. Est-ce que cela pourrait déjà être là, prêt à être branché ? Comment ce hack fonctionnera-t-il avec le thème "Twenty TwelveVersion : 1.5"
    ? Et tout comme avec le plugin wpml ?

  10. Salut mec, j'ai ajouté la classe walker à functions.php, mais je ne trouve pas wp_nav_menu dans le thème genesis. Qu'est-ce qui me manque ? Je n'ai aucune idée de ce qu'il faut faire ensuite ?!?

  11. Vous expliquez très bien – en détail et clairement. 1 minute et les descriptions des éléments de menu sont ok. Merci !

  12. Merci beaucoup pour ce tutoriel. Il m'a été recommandé et il a parfaitement fonctionné pour apporter les modifications que je voulais. Cependant, en apportant ces modifications, j'ai perdu mes menus déroulants de sous-éléments. Avez-vous une idée de ce qui a affecté cela dans le changement de code ?

    Merci pour votre temps et votre tutoriel

    • Cela semble être un problème de CSS, nous sommes désolés de ne pas avoir pu être plus précis. Essayez d'utiliser les outils de développement de Google Chrome pour le déboguer.

      Admin

  13. J'ai implémenté les descriptions de menu et cela a très bien fonctionné. Maintenant, mon client demande un saut de ligne dans l'une des descriptions. J'ai essayé de mettre un retour chariot et d'insérer une balise
    dans le champ de description via l'administration. Cela n'apparaît pas sur le front-end. WP supprime ces modifications. Y a-t-il un moyen d'y remédier ?

  14. Super tutoriel les gars, je veux juste savoir comment implémenter cela sur un menu personnalisé affiché à l'aide du widget Menu personnalisé ?

  15. Merci ! Je travaille sur WordPress depuis des années et je n'en avais jamais entendu parler. Je cherchais à supprimer les descriptions car elles étaient très redondantes sur le site sur lequel je travaille. J'ai cherché partout d'où elles venaient.

    Oh joie !

  16. ça marche !

    mais pour php 5.4 vous devrez faire correspondre les arguments wp walker pour la fonction start_el :

    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 )

    et remplacer $item par $object.

  17. Parfait. C'était exactement ce dont j'avais besoin pour finir un site. J'ai eu quelques problèmes avec le CSS, mais j'ai finalement trouvé et ça a fonctionné. Merci pour ces excellents articles.

  18. Cela a parfaitement fonctionné pour moi. La fonction de classe est parfaite aussi. Merci beaucoup !

  19. J'avais besoin de créer la même chose et j'étais complètement perdu.

    J'avais prévu de faire des choses stupides pour y arriver.

    Dieu merci, j'ai trouvé ce post et j'ai économisé du temps et du stress !

    J'adore ce site, j'ai appris tellement de choses.

    Merci beaucoup de montrer les choses les plus simples ici.

    • La balise span apparaît aussi dans les sous-menus.

      ça ne s'affiche pas là, mais ça prend tellement de place que ça rend mal.

      y a-t-il une solution de contournement pour ça ??

  20. C'est vraiment un excellent tutoriel et je me demandais si cela fonctionnerait sur Thesis 1.8.5 ? Sinon, ce serait formidable si vous pouviez en fournir un. Je vous aiderai certainement à le diffuser. Pouce levé !

  21. J'ai suivi votre tutoriel et ajouté une description à mon menu. Merci ! Cependant, lorsque je suis en mode mobile, le menu se convertit en menu déroulant et le titre du menu ainsi que la description sont connectés. Par exemple, si mon élément de menu est « à propos » et la description « en savoir plus sur moi », la version mobile affiche « à propos en savoir plus sur moi ». Y a-t-il un moyen de corriger cela ?

    • J'ai eu le même problème. Voici ce que j'ai fait.

      J'ai changé ceci :
      $description = ! empty( $item->description ) ? ‘<span>’.esc_attr( $item->description ).'</span>’ : ”;

      En ceci :
      $description = ! empty( $item->description ) ? ‘<br /><span>’.esc_attr( $item->description ).'</span>’ : ”;

      Je ne suis pas sûr que ce soit la meilleure solution, mais ça a fonctionné pour moi.

      • Merci les gars, j'ai rencontré ce que SVET et DAVID ont fait avec le menu mobile.
        Le code semble avoir changé, mon changement consistait simplement à ajouter un span avec le séparateur de tiret et dans ma requête de bureau, je l'ai simplement supprimé car il n'était pas nécessaire là-bas.

        $item_output .= ‘ – ‘;

        Dans ma requête "Desktop Only" (Bureau uniquement), définissez le span sur display none ;
        @media only screen and (min-width: 740px) {
        header #submenu li span.dash { display:none; }

        J'espère que cela aide, cela a bien résolu mon problème.

  22. Excellent article – très clair, exactement ce dont j'avais besoin et a parfaitement fonctionné. Merci !

  23. Merci pour le super tutoriel. J'ai bien fait les étapes principales, comme vous pouvez le voir sur
    http://ueab.ac.ke/demo/index

    J'étais bloqué avec le style - comment puis-je réduire l'espace entre le libellé du menu principal et la description ? Votre aide est grandement appréciée.

  24. Excellent article. J'ai essayé de me pencher sur cela auparavant, mais les instructions précédentes que j'avais trouvées n'étaient pas aussi faciles à suivre. J'ai pu insérer le code functions.php, comprendre comment changer la classe walker dans mon fichier d'en-tête (différent pour le thème que j'utilise, mais simple), et tout mettre en place en environ 15 minutes du début à la fin.

    Un élément que vous pourriez vouloir ajouter est la façon d'inclure la bordure droite sur le dernier élément du menu en utilisant la propriété :last-child.


    .menu-item:last-child { border-right: 1px solid #ccc; }

  25. Au lieu d'étendre Walker_Nav_Menu, il serait agréable (et plus facile) si un filtre était fourni, par exemple : Si le code principal avait : $item_output .= apply_filters( ‘walker_nav_menu_description’, $item->description);

    Alors la fonction de filtre personnalisée n'aurait que : return "" . $description . "";

Laisser un commentaire

Merci d'avoir choisi de laisser un commentaire. N'oubliez pas que tous les commentaires sont modérés conformément à notre politique de commentaires, et votre adresse e-mail ne sera PAS publiée. Veuillez NE PAS utiliser de mots-clés dans le champ du nom. Ayons une conversation personnelle et significative.