J'ai un wp_nav_menu
auquel je veux ajouter une classe aux éléments de la liste. Je sais que cela peut être fait en choisissant "css classes" dans le menu d'options à l'écran, mais je dois ensuite donner à chaque classe li
une classe.
J'ai un menu 2 profondeurs. (par exemple)
Est-ce possible dans la fonction wp_nav_menu
? J'ai cherché le codex mais je n'ai trouvé que "lien avant" et "lien après" mais je ne pense pas que ce soit ce dont j'ai besoin.
Il existe un filtre nav_menu_css_class
. Il est trivial d'ajouter des classes.
function add_classes_wpse_130358($classes, $item, $args) {
$classes[] = 'new-class';
return $classes;
}
add_filter('nav_menu_css_class','add_classes_wpse_130358',1,3);
Mais vous devrez probablement étendre Walker_Nav_Menu
ou utiliser le filtre walker_nav_menu_start_el
à la place, car le filtre nav_menu_css_class
n'a mystérieusement pas accès à la variable depth
. Mais walker_nav_menu_start_el
ne vous permet pas de définir les classes là où vous en avez besoin, donc supposons que votre PHP soit suffisamment nouveau ...
function depth_classes_wpse_130358($item_output, $item, $depth, $args) {
add_action(
'nav_menu_css_class',
function() use ($depth) {
$depth++;
$classes[] = "depth-{$depth}";
return $classes;
}
);
return $item_output;
}
add_filter('walker_nav_menu_start_el','depth_classes_wpse_130358',1,4);
Vous obtiendrez un depth-N
pour chaque niveau supérieur à 0.
Je ne me rappelle pas avoir jamais eu besoin de faire cela. Le balisage existant a toujours été suffisant, mais voilà.