Personalizando Solo un Menú Específico usando el Gancho "wp_nav_menu_items"

23 sept 2010, 17:14:20
Vistas: 53K
Votos: 43

Gracias a la ayuda recibida aquí, he logrado agregar un cuadro de búsqueda personalizado a mi menú principal... agregando esto a mi archivo functions.php del tema

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

Sin embargo, ahora he agregado otro menú para colocar en el pie de página, pero el cuadro de búsqueda también se agrega a este. ¿Cómo podría agregar el cuadro de búsqueda solo al menú principal?

Mi código para registrar los menús es:

register_nav_menus( array(
  'primary' => __( 'Navegación Principal', 'twentyten' ),
  'secondary'=>__('Menú Secundario', 'twentyten' ),

 ) );

...y el código para mostrar el menú secundario es:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 
0
Todas las respuestas a la pregunta 2
6
46

Para agregar solo el cuadro de búsqueda personalizado al menú principal, puedes pasar el segundo parámetro proporcionado por el filtro wp_nav_menu_items y verificar si theme_location es la ubicación primaria

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

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

gracias, eso es genial... solo una pregunta de principiante - ¿qué hace el 10, 2 en el código?

cannyboy cannyboy
23 sept 2010 17:45:10

10 es la prioridad (diez es el valor por defecto), 2 es el número de argumentos que la función a la que estamos enganchando el filtro acepta.

Rarst Rarst
23 sept 2010 18:25:34

@ ampt, Sí, lo intenté. Funcionó. casi. Cuando hago login, los enlaces de mi segundo menú desaparecen, ¿cómo puedo solucionar eso?

User User
5 oct 2011 02:59:49

Ten en cuenta que a partir de WP 3.8, la variable es $args->menu en lugar de $args->theme_location

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

@AlainJacometForte En realidad, $args->menu devuelve el ID numérico del menú, mientras que $args->theme_location devuelve el string, por lo que esta respuesta sigue siendo correcta tal como está. Nada ha cambiado si estás comparando los strings.

Marcus Marcus
25 may 2014 18:37:08

Usar $args->menu en lugar de $args->theme_location hizo que esto funcionara para mí usando la versión 4.3

shaunsantacruz shaunsantacruz
21 ago 2015 20:29:52
Mostrar los 1 comentarios restantes
1

Un método alternativo para hacer esto es agregar el slug del menú al filtro wp_nav_menu_items.

Por ejemplo, digamos que tienes un menú llamado Header y siempre deseas que este menú (ya esté asignado a una ubicación del tema o no) muestre un cuadro de búsqueda. Puedes hacerlo agregando el slug del menú, en este caso header, al filtro.

El nuevo filtro sería el siguiente:

add_filter( 'wp_nav_menu_header_items', 'search_box_function' );

Observa la parte header del nuevo filtro. Esto le indica a WordPress a qué menú agregar la función.

Esta es solo una forma diferente de abordar tu problema actual.

19 dic 2012 22:30:10
Comentarios

Mira el elemento de @oshi en esta página, que está dirigido a ti.

halfer halfer
2 ene 2013 03:39:16