Debugging – Versuch, den Menüs ein Suchfeld hinzuzufügen

Ich habe bereits eine ähnliche Frage bei stackoverflow gestellt ( https://stackoverflow.com/questions/22492292/add-filter-in-wordpress-how-do-i-know-if-it-is-run ), aber vielleicht auch war der falsche Ort?

Wie Sie dort sehen können, versuche ich ein Suchfeld in der von mir empfohlenen Weise hinzuzufügen:

add_filter('wp_nav_menu_items','menu_search'); function menu_search($items){ $search = ''; return $items . $search; } 

Ich sehe jedoch keine Spur des Suchfelds im Menü. Tatsächlich sieht es so aus, als ob der zu add_filter hinzugefügte Code nicht einmal ausgeführt wird.

Es gibt ein paar Dinge, die ich hier nicht kenne. Ich mache das in einem neuen Thema, basierend auf dem Unterstrich-Thema (siehe http://undnerscores.me/ ), da ich ein wirklich leichtes Thema brauchte. Ich beginne mich zu fragen, ob der Code für die Filterung im Unterstrich-Thema ausgeführt wird. Was ist der beste Weg, das zu überprüfen? (Ich kenne überhaupt kein PHP-Debugging. Ich habe gerade Debug-Bar hinzugefügt.) Und habe ich etwas im Unterstrich-Thema hier übersehen? Ich meine, sollte ich etwas hinzugefügt haben, um die Filterung durchzuführen?

Solutions Collecting From Web of "Debugging – Versuch, den Menüs ein Suchfeld hinzuzufügen"

wp_nav_menu_items werden im Codex nicht erwähnt, daher gibt es keine konkrete Beschreibung, wie man es benutzt.

wp_nav_menu_items kann in Zeile 347 in gefunden werden

wp-includes / nav-menu-template.php

 $items = apply_filters( 'wp_nav_menu_items', $items, $args ); 

innerhalb von wp_nav_menu .

Im Codex steht folgendes

Zeigt ein Navigationsmenü an, das im Bereich Darstellung → Menüs erstellt wurde.

Das bedeutet, dass wp_nav_menu_items nur ausgetriggers wird, wenn ein Navigationsmenü vorhanden ist, das im “menus” wp_nav_menu_items und nicht im Standardnavigationsmenü erstellt wurde. Es ist meiner Meinung nach ein Konstruktionserrors. wp_nav_menu_items sollte eigentlich auch im Standardmenü enthalten sein. Dies ist auch ein Aspekt, der in keinem der von mir getesteten Tutorials erwähnt wird.

Es gibt einen anderen Filter, den ich getestet habe, wp_list_pages , der wie erwartet funktioniert.

Es gibt jedoch ein Problem mit Ihrem Code. Wenn ich es der Standardnavigationsleiste hinzufüge, sende ich jede Suche, die ich mache, an meine database. Eigentlich wieder. Ich konnte keine richtigen Beispiele zum Arbeiten bekommen. Ich habe diesen Code schließlich in einem Plugin namens search-box-on-navigation-menu gefunden .

 < ?php add_filter('wp_nav_menu_items','add_search_box', 10, 2); function add_search_box($items, $args) { ob_start(); get_search_form(); $searchform = ob_get_contents(); ob_end_clean(); $items .= '
  • ' . $searchform . ''; return $items; } ?>
  • Damit dieser Code in der Standardnavigationsleiste funktioniert, fügen Sie einfach die folgende Zeile zum Code hinzu: add_filter('wp_list_pages','add_search_box', 10, 2); , so wird dein Endcode sein

     < ?php add_filter('wp_list_pages','add_search_box', 10, 2); add_filter('wp_nav_menu_items','add_search_box', 10, 2); function add_search_box($items, $args) { ob_start(); get_search_form(); $searchform = ob_get_contents(); ob_end_clean(); $items .= '
  • ' . $searchform . ''; return $items; } ?>
  • Ich hoffe das hilft

    Sie können dies auch verwenden

     add_filter( 'wp_nav_menu_items','add_search_box', 10, 2 ); function add_search_box( $items, $args ) { $items .= '
  • ' . get_search_form( false ) . '
  • '; return $items; }

    Dies ist eine viel einfachere Lösung – fügen Sie Ihrer functions.php Datei Folgendes hinzu:

     add_filter('wp_nav_menu_items','add_search_box_to_menu', 10, 2); function add_search_box_to_menu( $items, $args ) { if( $args->theme_location == 'primary' ) return $items.""; return $items; } 

    In dieser function sehen Sie, dass die IF-statement nach einem gewünschten Ort sucht – genauer gesagt sucht dieses Beispiel nach dem primären Menü:

     if( $args->theme_location == 'primary' ) 

    Sie könnten auch so etwas verwenden, um das Menü zu bestimmen:

     $args->menu->slug == 'the_menu_slug' 

    Wenn es ein primäres Menü gibt, gibt es das zurück, was Sie in den “return $ items” Anführungszeichen haben:

     return $items.""; 

    In diesem Fall habe ich ein Listenelement erstellt und die WP-function get_search_form () verkettet.

    Um dies in Ihrem Menü als Listenelement anzuzeigen, müssen Sie get_search_form () auf false setzen:

     get_search_form(false) 

    Dies liegt an dem Argument follow in der function get_search_form ():

    $ echo (bool) (Optional) Standard für Echo und nicht zurückgeben des Formulars. Standardwert: wahr

    Dies wird die gewünschte Suchmaske in einem bestimmten Menü erfolgreich erreichen.