Il n’y a pas d’option pour cela, mais vous pouvez étendre l’object «walker» que WordPress utilise pour créer le menu HTML. Une seule méthode doit être remplacée:
class My_Walker_Nav_Menu extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent
\n"; } }
Ensuite, il vous suffit de passer une instance de votre walker en argument à wp_nav_menu comme wp_nav_menu :
Voici une mise à jour de ce que Richard a fait en ajoutant un indicateur de “profondeur”. Le résultat est le niveau 0, le niveau 1, le niveau 2, etc.
class UL_Class_Walker extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent
\n"; } }
C’est une vieille question et je ne suis pas sûr que la solution que je vais mentionner soit disponible au moment où vous l’avez demandé, mais je pense que cela mérite d’être mentionné. Vous pouvez obtenir ce que vous voulez en ajoutant un filtre à nav_menu_submenu_css_class . Voir l’exemple ci-dessous – vous pouvez remplacer my-new-submenu-class par la ou les classe (s) souhaitée (s):
Comme cela a toujours été le cas, après avoir longtemps cherché quelque chose sur le site, une minute après avoir posté ici, j’ai trouvé ma solution.
Il pensait que je le partagerais ici pour que quelqu’un d’autre puisse le trouver.
//Add "parent" class to pages with subpages, change submenu class name, add depth class class Prio_Walker extends Walker_Nav_Menu { function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ){ $GLOBALS['dd_children'] = ( isset($children_elements[$element->ID]) )? 1:0; $GLOBALS['dd_depth'] = (int) $depth; parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); } function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent
\n"; } } add_filter('nav_menu_css_class','add_parent_css',10,2); function add_parent_css($classes, $item){ global $dd_depth, $dd_children; $classes[] = 'depth'.$dd_depth; if($dd_children) $classes[] = 'parent'; return $classes; } //Add class to parent pages to show they have subpages (only for automatic wp_nav_menu) function add_parent_class( $css_class, $page, $depth, $args ) { if ( ! empty( $args['has_children'] ) ) $css_class[] = 'parent'; return $css_class; } add_filter( 'page_css_class', 'add_parent_class', 10, 4 );
C’est là que j’ai trouvé la solution: Solution dans le forum de support WordPress
J’ai dû changer:
function start_lvl(&$output, $depth)
à:
function start_lvl( &$output, $depth = 0, $args = array() )
Parce que je recevais une erreur d’incompatibilité:
Ssortingct Standards: Declaration of My_Walker_Nav_Menu::start_lvl() should be compatible with Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array)
Cela peut vous être utile
Comment append une classe parente pour un élément de menu
function wpdocs_add_menu_parent_class( $items ) { $parents = array(); // Collect menu items with parents. foreach ( $items as $item ) { if ( $item->menu_item_parent && $item->menu_item_parent > 0 ) { $parents[] = $item->menu_item_parent; } } // Add class. foreach ( $items as $item ) { if ( in_array( $item->ID, $parents ) ) { $item->classes[] = 'menu-parent-item'; } } return $items; } add_filter( 'wp_nav_menu_objects', 'wpdocs_add_menu_parent_class' ); /** * Add a parent CSS class for nav menu items. * @param array $items The menu items, sorted by each menu item's menu order. * @return array (maybe) modified parent CSS class. */
Ajout de classes conditionnelles aux éléments de menu
function wpdocs_special_nav_class( $classes, $item ) { if ( is_single() && 'Blog' == $item->title ) { // Notice you can change the conditional from is_single() and $item->title $classes[] = "special-class"; } return $classes; } add_filter( 'nav_menu_css_class' , 'wpdocs_special_nav_class' , 10, 2 );
Je suggère de remplacer votre nom de classe css cutomclass par un sous-menu. utilisez find et replace: ie. find: .customclass replace avec .sub-menu, fonctionne pour moi.
Pour changer le nom de classe par défaut “sous-menu”, il existe un moyen simple. Vous pouvez simplement le changer en fichier wordpress.