Problema
Você não criou um menu no painel Appearance > Menus
no painel de controle do WordPress .
Meu raciocínio é baseado em um bug que ocorre nas seguintes condições:
- Nenhum menu de navegação foi criado
-
wp_nav_menu()
foi chamado com o padrão 'fallback_cb'
argument 'wp_page_menu'
-
wp_nav_menu()
foi chamado com um argumento 'container'
destinado a eliminar o contêiner (qualquer coisa que a função empty()
retorna true
para)
Soluções
Qualquer um dos itens a seguir deve remover o contêiner <div>
.
- Crie um menu no painel
Appearance > Menus
. O <div>
estranho deve desaparecer mesmo que você não associe o novo menu ao local do tema 'header-nav'
registrado.
-
Altere o argumento 'fallback_cb'
para uma função personalizada que retorna alguma marcação padrão - ou até mesmo uma cadeia vazia - ou seja,
'fallback_cb' => function() { return ''; },
Explicação
Caso a função wp_nav_menu()
não consiga localizar o menu indicado, ele tenta mais duas coisas para produzir a marcação do menu:
- Exibir o primeiro menu preenchido encontrado.
- Exibir a marcação do menu gerada pela função indicada pelo argumento
'fallback_cb'
(por padrão, wp_page_menu()
).
Sua marcação postada é para page
post-type com um ID de postagem de 2
e o título "Sample Page", possivelmente indicando uma nova instalação do WordPress, para a qual seria razoável supor que nenhum menu tenha sido criado. Isso indicou que sua chamada wp_nav_menu()
provavelmente retornará para wp_page_menu()
, pois a função de fallback criará um menu improvisado a partir de qualquer número de páginas em sua instalação.
Quando a função 'fallback_cb'
é chamada, ela recebe os mesmos argumentos que foram dados para wp_nav_menu()
(mesclados com argumentos padrão). Aqui a documentação do Codex sobre a função wp_page_menu()
está um pouco desatualizada, já que a partir do WordPress 4.4.0 a função realmente aceita e manipula um argumento 'container'
. Portanto, wp_page_menu()
está sendo chamado com o mesmo argumento 'container'
que você entregou a wp_nav_menu()
, que é ''
(literal de string vazia) ou false
.
A carne do problema é um comportamento contraditório que decorre de estas linhas em wp_page_menu()
:
// Fallback in case 'wp_nav_menu()' was called without a container.
if ( empty( $container ) ) {
$container = 'div';
}
Portanto, como empty()
avalia tanto o% booleanofalse
quanto o ''
a true
, essa pequena prova de falhas acha que você é louco por não querer um contêiner e adiciona um em "por" você .