¿Personalizar solo un menú específico con el gancho “wp_nav_menu_items”?

36

Gracias a alguna ayuda aquí, logré agregar un cuadro de búsqueda personalizado a mi menú principal ... agregando esto a las funciones de mi 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>";
}

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

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

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

 ) );

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

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

Respuestas:

41

Para agregar solo el cuadro de búsqueda personalizada al menú principal, puede pasar el segundo parámetro proporcionado por el filtro wp_nav_menu_items y verificar si la ubicación del tema es la ubicación 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
fuente
3
gracias, eso es genial ... solo una pregunta para novatos: ¿qué hace 10, 2el código?
cannyboy
44
10es prioridad (diez es el valor predeterminado), 2es el número de argumentos que la función que estamos conectando para filtrar acepta.
Rarst
@ ampt, sí, lo intenté. Funcionó. casi. Cuando inicio sesión, mi segundo enlace de menú desaparece, ¿cómo puedo resolver eso?
1
Tenga en cuenta que a partir de WP 3.8, la variable es $ args-> menu en lugar de $ args-> theme_location
Alain Jacomet Forte
@AlainJacometForte En realidad, $ args-> menu devuelve la ID numérica del menú, mientras que $ args-> theme_location devuelve la cadena, por lo que esta respuesta sigue siendo correcta. Nada ha cambiado si está comparando las cadenas.
Marcus
8

Un método alternativo para hacerlo es agregar la babosa del menú al filtro wp_nav_menu_items.

Por ejemplo, supongamos que tiene un menú llamado Encabezado y siempre desea que este menú (ya sea adjunto a una ubicación de tema o no) muestre un cuadro de búsqueda. Puede hacerlo agregando la babosa 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' );   

Observe la headerparte del nuevo filtro. Esto le dice a WordPress a qué menú agregar la función.

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

Justin Kopepasah
fuente
Vea el artículo de @oshi en esta página, que está dirigido a usted.
halfer