WordPress : Ajouter des div supplémentaires aux éléments de navigation WordPress

Publié par Jean-Michel le

WordPress : comment modifier la structure HTML de wp_nav_menu ? 🧱

  • 1· Objectif — Ajouter un <div class="alignme"> autour des éléments du menu principal pour un contrôle CSS précis.
  • 2· Problèmewp_nav_menu() génère du HTML standard difficile à personnaliser sans “hacker” le cœur.
  • 3· Solution propre — Créer un Walker personnalisé (ex : Add_Div_Walker) en surchargeant la méthode start_el().
  • 4· Exemple — Dans functions.php :
    • Créer une classe qui hérite de Walker_Nav_Menu.
    • Insérer les balises HTML souhaitées dans start_el().
    • Passer la classe via l’argument 'walker' => new Add_Div_Walker dans wp_nav_menu().
  • 5· Avantage — Total contrôle sur l’output HTML des menus WordPress, sans casser la structure native.

➡️ Créez un Walker personnalisé pour injecter vos <div> et balises à l’endroit précis où vous en avez besoin.

Quel est le moyen le plus simple de modifier la sortie générée par mon wp-menu à partir de

<ul class="primary-menu">
<li class="menu-item">
    <a href="">nav link</a>
    <ul class="sub-menu"></ul>
</li>
</ul>

à

<ul class="primary-menu">
<li class="menu-item">
    <div class="alignme">
        <button></button><a href=""></a><button></button>
    </div>
    <ul class="sub-menu"></ul>
</li>
</ul>

?

J’ai besoin de ce type de « helper div » car je dois aligner les trois éléments d’une certaine manière et indépendamment d’un éventuel contenu supplémentaire (par exemple, un sous-menu) à l’intérieur du li.

J’utilise wp_nav_menu() par défaut et en tant que créateur de thème pour la première fois, je ne sais pas où trouver la « configuration » du menu. Une idée où je devrais regarder de plus près ?

Solution n°1 trouvée

ajouter la classe walker dans wp_nav_menu « new Add_Div_Walker ». vérifiez mon code ci-dessous.

$menu = array(
    'theme_location'  => 'primary',
    'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
    'walker'          => new Add_Div_Walker
);
wp_nav_menu( $menu );

// add this below code in your functions.php file.
class Add_Div_Walker extends Walker_Nav_Menu {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("t", $depth);
        $output .= "n$indent<div class='alignme'>
            <button></button><a href=''></a><button></button>
        </div><ul class='submenu'>n";
    }
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("t", $depth);
        $output .= "$indent</ul>n";
    }
}
Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *