Personalizarea unui meniu specific folosind hook-ul "wp_nav_menu_items"

23 sept. 2010, 17:14:20
Vizualizări: 53K
Voturi: 43

Mulțumită ajutorului primit aici, am reușit să adaug o casetă de căutare personalizată în meniul meu principal... adăugând acest cod în functions.php al temei

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='Caută'></form></li>";
}

Totuși, acum am adăugat un alt meniu pentru footer, dar caseta de căutare apare și în acesta. Cum aș putea adăuga caseta de căutare doar în meniul principal?

Codul meu pentru înregistrarea meniurilor este:

register_nav_menus( array(
  'primary' => __( 'Navigare Principală', 'twentyten' ),
  'secondary'=>__('Meniu Secundar', 'twentyten' ),

 ) );

..și codul pentru afișarea meniului secundar este:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 
0
Toate răspunsurile la întrebare 2
6
46

Pentru a adăuga caseta personalizată de căutare doar în meniul principal, puteți utiliza al doilea parametru oferit de filtrul wp_nav_menu_items și să verificați dacă theme_location este locația primară

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='Caută'></form></li>";

    return $nav;
}
23 sept. 2010 17:36:08
Comentarii

mulțumesc, e grozav... doar o întrebare de începător - ce face 10, 2 în cod?

cannyboy cannyboy
23 sept. 2010 17:45:10

10 este prioritatea (zece este valoarea implicită), 2 reprezintă numărul de argumente pe care funcția pe care o conectăm la filtru le acceptă.

Rarst Rarst
23 sept. 2010 18:25:34

@ ampt, Da, am încercat asta. A funcționat. aproape. Când mă autentific, link-urile din al doilea meniu dispar, cum pot rezolva asta?

User User
5 oct. 2011 02:59:49

Rețineți că începând cu WP 3.8, variabila este $args->menu în loc de $args->theme_location

Alain Jacomet Forte Alain Jacomet Forte
26 mar. 2014 23:00:51

@AlainJacometForte De fapt, $args->menu returnează ID-ul numeric al meniului, în timp ce $args->theme_location returnează șirul de caractere, deci acest răspuns este în continuare corect așa cum este. Nimic nu s-a schimbat dacă comparați șirurile de caractere.

Marcus Marcus
25 mai 2014 18:37:08

Folosirea lui $args->menu în loc de $args->theme_location a funcționat pentru mine în versiunea 4.3

shaunsantacruz shaunsantacruz
21 aug. 2015 20:29:52
Arată celelalte 1 comentarii
1

O metodă alternativă de a face acest lucru este adăugarea slug-ului meniului la filtrul wp_nav_menu_items.

De exemplu, să presupunem că ai un meniu numit Header și dorești ca acest meniu (indiferent dacă este atașat unei locații din temă sau nu) să afișeze întotdeauna o căsuță de căutare. Poți face acest lucru prin adăugarea slug-ului meniului, în acest caz header, la filtrul respectiv.

Noul filtru ar arăta astfel:

add_filter( 'wp_nav_menu_header_items', 'search_box_function' );

Observă partea header din noul filtru. Aceasta îi spune WordPress la ce meniu să adauge funcția.

Acesta este doar un mod diferit de a aborda problema ta actuală.

19 dec. 2012 22:30:10
Comentarii

Vezi articolul de la @oshi pe această pagină, care este adresat ție.

halfer halfer
2 ian. 2013 03:39:16