Remove o elemento Container De wp_nav_menu () Marcação

4

Eu tentei várias opções como configurar 'container' => false e registrar o theme_location e pesquisar em fóruns, mas não consigo me livrar do "div" que vem com o wp_nav_menu na minha página:

<?php get_nav_menu();?>

function get_nav_menu() {
    $navMenuDefaults = array(
    'theme_location'  => 'header-nav',
    'menu'            => '',
    'container'       => false,
    'container_class' => '',
    'container_id'    => '',
    'menu_class'      => '',
    'menu_id'         => '',
    'echo'            => true,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
    'depth'           => 0,
    'walker'          => ''
);
    return wp_nav_menu($navMenuDefaults);
}

e em functions.php:

function register_top_nav() {
  register_nav_menu('header-nav',__( 'Header Nav' ));
}
add_action( 'init', 'register_top_nav' );

Não sei ao certo porque estou recebendo a seguinte saída:

<div class="">
    <ul>
        <li class="page_item page-item-2">
            <a href="url">Sample Page</a>
        </li>
    </ul>
</div>

Como posso obter algo como seguir:

<ul class="abc">
    <li>
        <a href="#">dfdf</a>
    </li>
</ul>

obrigado.

    
por me_digvijay 12.09.2015 / 15:50

6 respostas

3

FYI: container => '' é uma operação de string e seu padrão é definido por div você não pode usar true or false like bool expression .

Basta alterar o container => 'ul' , então espero que você consiga o que deseja ver. Para mais detalhes, por favor, leia isto: enlace

Obrigado Musa

    
por MD MUSA 12.09.2015 / 16:13
1

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:

  1. Exibir o primeiro menu preenchido encontrado.
  2. 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ê .

    
por bosco 19.07.2016 / 07:10
0

Como você define "container" como false, isso deve funcionar a menos que haja um bug em qualquer lugar, seja no ambiente ou em um conflito com outra coisa.

Na verdade, eu testei isso em Twenty Fifteen e em um dos meus temas temáticos.

Você pode verificar se há algum cache interno que não esteja refletindo suas alterações imediatamente?

Obrigado

    
por Muntasir Mahmud Aumio 14.09.2015 / 18:28
0

Você pode tentar com este cenário.

Etapa 1:

Coloque este código no arquivo functions.php do seu tema:

add_action( 'after_setup_theme', 'theme_nav_setup' );

if ( ! function_exists( 'theme_nav_setup' ) ){
  function theme_nav_setup() {  
    register_nav_menu( 'header-nav_new', __( 'Main Menu', 'text-domain' ) );
  }
}

Etapa 2:

Em seguida, ligue para este local onde você pode ver esta saída do menu:

wp_nav_menu( array(
  'menu' => 'header-nav_new',
  'theme_location'    => 'header-nav_new',
  'depth'             => 6,
  'container'         => 'ul',
  'fallback_cb'       => 'wp_page_menu',
  'menu_class'        => 'abc'
 )
);
    
por MD MUSA 12.09.2015 / 22:56
0

Sim, você pode usar este código

$nav_menu = array(
       'title_li'        => '', 
       'container'       => '',
       'theme_location'  => 'header-nav',   
        'menu_class'     => '',
        'menu_id'        => '',
);                    

wp_nav_menu( $nav_menu );

O código acima exibirá o menu no formato ul e li sem ter nenhuma classe e id para as tags ul e li

    
por Aftab 30.07.2016 / 20:59
0

De minha própria experiência, se você ainda não atribuiu o menu ao local do menu registrado, todas as configurações de argumento prefixadas com container não funcionarão. você tem que atribuir o menu criado ao local do menu registrado antes de ver a mudança.

    
por Pakpoom Tiwakornkit 23.09.2016 / 06:04