Agregar clase a todos los elementos de la lista de wp_nav_menu

2

Tengo un wp_nav_menu al que quiero agregar clases a los elementos de la lista. Sé que esto se puede hacer seleccionando 'clases css' en el menú de opciones de pantalla, pero luego tengo que dar a cada clase de li .

Tengo un menú de 2 profundidades. (por ejemplo)

  • Todos los li normales quiero dar a la clase lidepth1
  • Todos los submenúes de Li que quiero dar a la clase lidept2

¿Es esto posible en la función wp_nav_menu ? Busqué en el códice pero solo encontré "enlace antes" y "enlace después" pero no creo que sea lo que necesito.

    
pregunta Maartje 19.01.2014 - 15:47

1 respuesta

7

Hay un filtro nav_menu_css_class . Es trivial agregar clases.

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

Pero probablemente necesitará extender Walker_Nav_Menu o usar el filtro walker_nav_menu_start_el en su lugar, ya que el filtro nav_menu_css_class misteriosamente no tiene acceso a la variable depth . Pero walker_nav_menu_start_el no te permite configurar las clases donde necesitas, por lo que suponiendo que tu PHP sea lo suficientemente nuevo ...

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

Obtendrá un depth-N para cada nivel superior a 0.

No recuerdo haber necesitado hacer esto. El marcado existente siempre ha sido suficiente, pero hay que ir.

    
respondido por el s_ha_dum 19.01.2014 - 15:52

Lea otras preguntas en las etiquetas