Anpassen nur eines bestimmten Menüs mit dem Hook "wp_nav_menu_items"?


36

Dank einiger Hilfe hier habe ich es geschafft, meinem Hauptmenü ein benutzerdefiniertes Suchfeld hinzuzufügen ... indem ich dieses zur functions.php meines Themas hinzufügte

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>";
}

Allerdings habe ich jetzt ein weiteres Menü hinzugefügt, um es in die Fußzeile einzufügen, aber das Suchfeld wird auch diesem hinzugefügt. Wie füge ich das Suchfeld nur dem Hauptmenü hinzu?

Mein Code zum Registrieren der Menüs lautet:

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

 ) );

..und der Code zum Anzeigen des sekundären Menüs lautet:

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

Antworten:


41

Um nur das benutzerdefinierte Suchfeld zum Hauptmenü hinzuzufügen, können Sie den zweiten Parameter übergeben, der vom Filter wp_nav_menu_items bereitgestellt wird, und prüfen, ob theme_location der primäre Speicherort ist

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;
}

3
danke, das ist toll ... nur eine neue frage - was macht das 10, 2im code?
Cannyboy

4
10ist die Priorität (zehn ist die Standardeinstellung) und 2die Anzahl der Argumente, die von der Funktion, die wir mit dem Filter verknüpfen, akzeptiert werden.
Rarst

@amppt, ja das habe ich probiert. Es funktionierte. fast. Wenn ich mich anmelde, verschwinden meine zweiten Menü-Links. Wie kann ich das lösen?

1
Beachten Sie, dass ab WP 3.8 die Variable $ args-> menu anstelle von $ args-> theme_location ist
Alain Jacomet Forte

@AlainJacometForte Tatsächlich gibt $ args-> menu die numerische ID des Menüs zurück, während $ args-> theme_location die Zeichenfolge zurückgibt, sodass diese Antwort immer noch korrekt ist. Beim Vergleichen der Zeichenfolgen hat sich nichts geändert.
Marcus

8

Eine alternative Methode hierfür ist das Hinzufügen des Menü-Slugs zum Filter wp_nav_menu_items.

Angenommen, Sie haben ein Menü mit dem Namen Header und möchten, dass in diesem Menü (unabhängig davon, ob es an einen Themenort angehängt ist oder nicht) immer ein Suchfeld angezeigt wird. Sie können dies tun, indem Sie den Menü-Slug in diesem Fall headerzum Filter hinzufügen .

Der neue Filter würde wie folgt aussehen:

add_filter ('wp_nav_menu_header_items', 'search_box_function');
( 'wp_nav_menu_header_items', 'search_box_function' );

Beachten Sie den headerTeil des neuen Filters. Dies teilt WordPress mit, zu welchem ​​Menü die Funktion hinzugefügt werden soll.

Dies ist nur ein anderer Weg, um Ihr aktuelles Problem anzugehen.


Sehen Sie sich den Artikel von @oshi auf dieser Seite an, der an Sie gerichtet ist.
halfer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.