Então hoje eu comecei a trabalhar no meu primeiro tema Wordpress e até agora tem sido muito divertido. No entanto, tive dificuldade em fazer com que o wp_nav_menu () fizesse o que eu queria.
Aqui está o que eu quero:
<nav id="topnav" class="menu">
<ul>
<li class="current_page_item"><a href="#" title="Home">Home</a></li>
<li class="page_item page-item-2"><a href="#" title="About">About</a></li>
</ul>
</nav>
Olhando na documentação, eu esperaria que a seguinte ligação fizesse o que eu quero:
<?php wp_nav_menu(array( 'container' => 'nav', 'container_id' => 'topnav' )); ?>
Mas ao invés disso eu entendo isso:
<div class="menu">
<ul>
<li class="current_page_item"><a href="#" title="Home">Home</a></li>
<li class="page_item page-item-2"><a href="#" title="About">About</a></li>
</ul>
</div>
Para mim, parece que meus parâmetros personalizados estão sendo ignorados, já que a saída de wp_nav_menu()
é exatamente a mesma. Existe algo que eu preciso ligar em algum lugar para ativar isso ou há algo mais acontecendo?
EDIT
Curiosamente, se eu alterar menu_class
, altera a classe div (eu esperava que o div fosse o container), mas mudar menu_id
não faz nada.
EDIT 2
Mesmo indo em nav-menu-template.php e alterando os padrões para container, container_id, container_class, menu_id não faz nada. Alterar menu_class para yyy mudará a classe div do menu para yyy.
eu tive o problema de salvar: é porque se você não criar o menu no wordpress admin use um método de fallback e cria o menu fora de todas as páginas ativas ... e se isso acontecer do que as opções de wp_nav_menu não são usadas .. .
então: basta criar o menu no admin e vc pode mudar o wrapper-tag para "nav"
Primeiro de tudo, você não conseguirá que o WordPress produza qualquer tipo de elemento <nav>
usando funções nativas. <nav>
é uma tag HTML5, e o WordPress é construído para gerar saída XHTML ... ou seja, nenhum elemento <nav>
.
Edit: Aparentemente, a função permite nav
... mas tenha em mente que o resto do núcleo do WordPress ainda é construído para a saída XHTML, não HTML5 ... tome cuidado para garantir que seu site valide corretamente .
Tente remover essa referência ... pode estar causando o erro que está ignorando sua instrução 'container_id' => 'topnav'
. Se as coisas funcionarem corretamente sem a referência a nav
, você deve ter isto:
<div id="topnav" class="menu">
<ul>
<li class="current_page_item"><a href="#" title="Home">Home</a></li>
<li class="page_item page-item-2"><a href="#" title="About">About</a></li>
</ul>
</div>
A API do menu está parcialmente quebrada, você não pode confiar na saída. Existem diversos tickets no trac em relação a isso, só fiz uma pesquisa rápida, mas talvez uma solução para o seu problema seja explicada em um deles:
não tenho certeza se alguém ainda está tentando resolver isso - mas acabei de chegar aqui tentando encontrar a resposta sozinho - pensei em compartilhar minha solução :)
Também queria usar o <nav> em vez do elemento <div> e resolvi-o removendo o <div>, como indicado nesta página, wordpress codex:http://codex.wordpress.org/ Function_Reference/wp_nav_menu :
<?php
function my_wp_nav_menu_args( $args = '' )
{
$args['container'] = false;
return $args;
} // function
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );
?>
Adicionado ao meu arquivo functions.php, marcado o arquivo de tema com a tag <nav> e tudo funcionou bem para mim;) espero que isso ajude :)