閲覧数:3,567 views
あなたが今、読んでいるカテゴリー:
wordpress
最近このブログのメインメニューに検索窓を追加しました。このブログに検索窓が果たして必要なのかどうかはさて置き、メインのメニューにあったら便利かなと思いまして。
グローバルナビゲーションに検索窓を設置するプラグイン「Search box on Navigation Menu」
wordpressのプラグイン検索から「Search box on Navigation Menu」で検索していただいてもOKですし、以下からもダウンロードが可能です。
有効化すれば、特に設定を行わなくてもMenuの最後に追加されます。表示位置はお使いのテーマによっては、ズレて表示されてしまうかもしれませんので、CSSを調整してみてください。
このプラグインの問題点
筆者がダウンロードしたのはバージョン 1.1ですが、このプラグインには一つ問題点があります。
ウィジェットにカスタムメニューなどを設置している場合こちらにも検索窓が表示されてしまうというものです。
グローバルナビにだけ設置したい方にとってはちょっと困っちゃいます。以下のサイトを参考にさせていただきました。とても参考になりました。
このプラグインがやっていること
このプラグインのソースコードを見てみました。
1 2 3 4 5 6 7 8 9 10 11 |
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 .= '<li>' . $searchform . '</li>'; return $items; } |
筆者、そんなに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関数の定義があります。この関数内で
1 |
$items = apply_filters( 'wp_nav_menu_items', $items, $args ); |
と呼び出しています( 388行目あたり)。この関数の呼び出し仕様は以下の通りです。ソース中のjavadocをそのまま書いてます。
1 2 3 4 5 6 7 8 9 10 |
/** * Filter the HTML list content for navigation menus. * * @since 3.0.0 * * @see wp_nav_menu() * * @param string $items The HTML list content for the menu items. * @param object $args An object containing wp_nav_menu() arguments. */ |
引数の説明の部分を簡単に訳すと
- $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を呼び出しているところで、何を渡しているかで臨機応変に対応してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
add_filter('wp_nav_menu_items','add_search_box', 10, 2); function add_search_box($items, $args) { /* ★★theme_locationがprimaryの場合★★ */ if( $args->theme_location === 'primary' ) { ob_start(); get_search_form(); $searchform = ob_get_contents(); ob_end_clean(); $items .= '<li>' . $searchform . '</li>'; } return $items; } |
さいごに
検索フォームを目立つ場所に設置してみたい方はお試しあれ~♪グローバルナビゲーションに追加することで、サイト内検索で記事を見てもらえる可能性が上がるかもしれませんよ!