web-dev-qa-db-ja.com

"wp_nav_menu_items"フォークを使用して特定のメニューのみをカスタムメイドする

ここでの助けのおかげで、私はメインメニューにカスタム検索ボックスを追加することに成功しました...これを私のテーマのfunctions.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>";
}

ただし、フッターを配置するためのメニューをもう1つ追加しましたが、検索ボックスもこのメニューに追加されます。検索ボックスをプライマリメニューにのみ追加する方法を教えてください。

メニューを登録するための私のコードは次のとおりです。

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

 ) );

..そして二次メニューを表示するためのコードは:

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

カスタム検索ボックスをメインメニューにのみ追加するには、wp_nav_menu_itemsフィルタによって提供される2番目のパラメータを渡して、theme_locationが主要な場所であるかどうかを確認します。

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

これを行う代替方法は、メニュースラッグをwp_nav_menu_itemsフィルターに追加することです。

たとえば、Headerという名前のメニューがあり、このメニュー(テーマの場所に添付されているかどうかにかかわらず)に常に検索ボックスを表示させたいとします。これを行うには、メニュースラッグ(この場合はheader)をフィルタに追加します。

新しいフィルタは次のようになります。

 add_filter( 'wp_nav_menu_header_items'、 'search_box_function'); 

新しいフィルタのheader部分に注目してください。これはWordPressにどのメニューに機能を追加するかを伝えます。

これはあなたの現在の問題に取り組むための一つの異なる方法です。

7