it-swarm.com.de

Klasse zu allen Listenelementen von wp_nav_menu hinzufügen

Ich habe einen wp_nav_menu, zu dem ich Klassen zu den Listenelementen hinzufügen möchte. Ich weiß, dass dies durch Auswahl von "css classes" im Menü "screen options" erreicht werden kann, aber dann muss ich jeder einzelnen li eine Klasse zuweisen.

Ich habe ein 2-Tiefen-Menü. (zum Beispiel)

  • All die normalen Li's möchte ich der Klasse lidepth1 geben
  • Alle Untermenüs, die ich habe, möchte ich der Klasse lidept2 geben

Ist dies in der Funktion wp_nav_menu möglich? Ich habe den Codex durchsucht, aber ich habe nur "link before" und "link after" gefunden, aber ich glaube nicht, dass ich das brauche.

2
Maartje

Es gibt einen nav_menu_css_class Filter. Es ist trivial, Klassen hinzuzufügen.

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);

Wahrscheinlich müssen Sie jedoch Walker_Nav_Menu erweitern oder stattdessen den Filter walker_nav_menu_start_el verwenden, da der Filter nav_menu_css_class auf mysteriöse Weise keinen Zugriff auf die Variable depth hat. Mit walker_nav_menu_start_el können Sie die Klassen jedoch nicht dort festlegen, wo Sie sie benötigen. Vorausgesetzt, Ihr PHP ist neu genug ...

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);

Sie erhalten einen depth-N für jedes Level, das größer als 0 ist.

Ich erinnere mich nicht, dass ich das jemals tun musste. Das vorhandene Markup war schon immer ausreichend, aber los geht's.

7
s_ha_dum