Verifique se os itens wp_nav_menu possuem submenus

2

Eu estou olhando para a seguinte marcação para um menu através de wp_nav_menu,

<ul>
        <li><a href="/">Home</a></li>
        <li>
            <a href="/" aria-haspopup="true">Blog</a>
            <ul>
                <li><a href="/">Design</a></li>
                <li><a href="/">HTML</a></li>
                <li><a href="/">CSS</a></li>
                <li><a href="/">JavaScript</a></li>
            </ul>
        </li>
</ul>

Os itens de menu podem ter submenus - se esse for o caso, o link de nível superior precisa ser formatado como no exemplo acima. Eu tentei soluções diferentes olhando para o códice, mas sem sucesso. Parece que vou precisar criar um walker para isso, a menos que eu queira adicionar um monte de consultas (executando loops de submenu dentro de um loop principal). Mas como é uma mudança tão pequena, não seria possível adicionar um gancho de filtro na saída do menu?

    
por Staffan Estberg 14.07.2014 / 12:07

1 resposta

8

Se bem entendi, você deseja que links com submenus tenham um atributo de aria-haspopup . Se isso estiver correto, você poderá fazer isso usando o filtro nav_menu_link_attributes (WP 3.6 e superior). Você também pode contornar a necessidade de ter que escrever um Walker personalizado para verificar se um item tem filhos, verificando suas classes css no filtro.

add_filter( 'nav_menu_link_attributes', 'wpse154485_add_aria_haspopup_atts', 10, 3 );
function wpse154485_add_aria_haspopup_atts( $atts, $item, $args ) {
  if (in_array('menu-item-has-children', $item->classes)) {
    $atts['aria-haspopup'] = 'true';
  }
  return $atts;
}
    
por nothingtosee 14.07.2014 / 13:16