Personalizando Solo un Menú Específico usando el Gancho "wp_nav_menu_items"
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' ) );
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;
}

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

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.

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

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

@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.

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.
