Adicione classe a todos os itens da lista de wp_nav_menu

2

Eu tenho um wp_nav_menu ao qual desejo adicionar classes aos itens da lista. Eu sei que isso pode ser feito escolhendo 'css classes' no menu de opções de tela, mas então eu tenho que dar cada li de uma única classe.

Eu tenho um menu de 2 profundidades. (por exemplo)

  • Todos os li normais que eu quero dar à classe lidepth1
  • Todo o submenu li's eu quero dar a classe lidept2

Isso é possível na função wp_nav_menu ? Eu procurei no códice, mas eu só encontrei "link antes" e "link após", mas eu não acho que é isso que eu preciso.

    
por Maartje 19.01.2014 / 15:47

1 resposta

7

Existe um filtro nav_menu_css_class . É trivial adicionar 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);

Mas você provavelmente precisará estender Walker_Nav_Menu ou usar o filtro walker_nav_menu_start_el , já que o filtro nav_menu_css_class misteriosamente não tem acesso à variável depth . Mas walker_nav_menu_start_el não deixa você definir as classes onde você precisa, então supondo que seu PHP seja novo o suficiente ...

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

Você receberá um depth-N para cada nível maior que 0.

Eu não me lembro de precisar fazer isso. A marcação existente sempre foi suficiente, mas lá vai você.

    
por s_ha_dum 19.01.2014 / 15:52

Tags