web-development-kb-pt.site

contêiner personalizado wp_nav_menu () e container_id

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.

3
Tom Savage

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"

6
user2802

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>
1
EAMann
1
hakre

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

0
user3160