メインメニューに検索窓を設置する方法とwp_nav_menu_itemsについて

閲覧数:3,567 views

あなたが今、読んでいるカテゴリー:
wordpress

スポンサーリンク

最近このブログのメインメニューに検索窓を追加しました。このブログに検索窓が果たして必要なのかどうかはさて置き、メインのメニューにあったら便利かなと思いまして。

グローバルナビに検索フォーム

グローバルナビゲーションに検索窓を設置するプラグイン「Search box on Navigation Menu」

wordpressのプラグイン検索から「Search box on Navigation Menu」で検索していただいてもOKですし、以下からもダウンロードが可能です。

Search box on Navigation Menu

有効化すれば、特に設定を行わなくてもMenuの最後に追加されます。表示位置はお使いのテーマによっては、ズレて表示されてしまうかもしれませんので、CSSを調整してみてください。

このプラグインの問題点

footer_menu

筆者がダウンロードしたのはバージョン 1.1ですが、このプラグインには一つ問題点があります。
ウィジェットにカスタムメニューなどを設置している場合こちらにも検索窓が表示されてしまうというものです。
グローバルナビにだけ設置したい方にとってはちょっと困っちゃいます。以下のサイトを参考にさせていただきました。とても参考になりました。

このプラグインがやっていること

このプラグインのソースコードを見てみました。

筆者、そんなにPHPは知らないんですけどやっていることは以下の通りです。

  • wp_nav_menu_itemsフィルタにadd_search_boxをフック関数として追加
  • get_search_form(検索フォーム)の内容をバッファに出力して、変数$searchformにバッファの内容を代入
  • 変数$itemsに、この結果をli要素として追加して、戻り値として返している

wp_nav_menu_itemsにフックさせた関数の引数には何が渡されるの?

wpseek(海外サイトです)というサイトを参考にさせていただきました。これからお世話になりそうなサイトです。

wp_nav_menu_items (WordPress Filter Hook)

WordPress 4.0.1の場合、wp-includes/nav-menu-template.phpで、wp_nav_menu関数の定義があります。この関数内で

と呼び出しています( 388行目あたり)。この関数の呼び出し仕様は以下の通りです。ソース中のjavadocをそのまま書いてます。

引数の説明の部分を簡単に訳すと

  • $items 各メニュー項目のHTMLリスト要素
  • $args  wp_nav_menu関数で指定された引数

といったところです。wp_nav_menuの引数に関しては日本語の解説がありますので、引数の値は以下のサイトを参照してください。

テンプレートタグ/wp nav menu – WordPress Codex 日本語版

結局どこを修正すればいいの?

長々と説明しましたが、「wp_nav_menu 関数」で指定したパラメーターが使用できるので条件分岐を1つ追加して完了です。
$args->theme_locationで比較する場合の文字列(今回でいえば’primary’)は、テーマ内のheader.phpのwp_nav_menuを呼び出しているところで、何を渡しているかで臨機応変に対応してみてください。

さいごに

検索フォームを目立つ場所に設置してみたい方はお試しあれ~♪グローバルナビゲーションに追加することで、サイト内検索で記事を見てもらえる可能性が上がるかもしれませんよ!

スポンサーリンク