Personalizando apenas um menu específico usando o gancho "wp_nav_menu_items"?

36

Graças a alguma ajuda aqui, consegui adicionar uma caixa de pesquisa personalizada ao meu menu principal ... adicionando-a às funções do meu tema.php

add_filter('wp_nav_menu_items','search_box_function');
  function search_box_function ($nav){
  return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";
}

No entanto, agora adicionei outro menu para colocar no rodapé, mas a caixa de pesquisa também é adicionada a este. Como adicionaria a caixa de pesquisa apenas ao menu principal?

Meu código para registrar os menus é:

register_nav_menus( array(
  'primary' => __( 'Primary Navigation', 'twentyten' ),
  'secondary'=>__('Secondary Menu', 'twentyten' ),

 ) );

..e o código para exibir o menu secundário é:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 
cannyboy
fonte

Respostas:

41

Para adicionar apenas a caixa de pesquisa personalizada ao menu principal, você pode passar o segundo parâmetro fornecido pelo filtro wp_nav_menu_items e verificar se o local do tema é o local principal

add_filter('wp_nav_menu_items','search_box_function', 10, 2);
function search_box_function( $nav, $args ) {
    if( $args->theme_location == 'primary' )
        return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";

    return $nav;
}
ampt
fonte
3
obrigado, isso é ótimo ... apenas uma pergunta para iniciantes - o que 10, 2o código faz?
Cannyboy 23/09/10
4
10é prioridade (dez é o padrão), 2é o número de argumentos que a função que estamos conectando ao filtro aceita.
Rarst 23/09
@ ampt, Sim, eu tentei isso. Funcionou. quase. Quando eu faço o login, meus links do segundo menu desaparecem, como posso resolver isso?
11
Note-se que a partir de WP 3.8, a variável é de R $ args-> menu em vez de US $ args-> theme_location
Alain Jacomet Forte
@AlainJacometForte Na verdade, o menu $ args-> retorna o ID numérico do menu, enquanto $ args-> theme_location retorna a string, portanto, essa resposta ainda está correta do jeito que está. Nada mudou se você estiver comparando as strings.
Marcus
8

Um método alternativo de fazer isso é adicionar a opção de menu ao filtro wp_nav_menu_items.

Por exemplo, digamos que você tenha um menu chamado Cabeçalho e sempre deseje que esse menu (esteja ele anexado a um local de tema ou não) exiba uma caixa de pesquisa. Você pode fazer isso adicionando a barra de menus, neste caso header, ao filtro.

O novo filtro seria o seguinte:

add_filter ( 'wp_nav_menu_header_items' , 'search_box_function' );   

Observe a headerparte do novo filtro. Isso diz ao WordPress em que menu adicionar a função.

Essa é apenas uma maneira diferente de abordar seu problema atual.

Justin Kopepasah
fonte
Veja o item de @oshi nesta página, que é endereçado a você.
halfer