使用“wp_NAV_MENU_ITEMS”钩子仅自定义特定菜单?

时间:2010-09-23 作者:cannyboy

多亏了这里的帮助,我成功地在主菜单中添加了一个自定义搜索框。。。通过将其添加到我的主题函数中。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>";
}
然而,我现在已经添加了另一个菜单放在页脚中,但搜索框也被添加到这个菜单中。如何仅将搜索框添加到主菜单?

我注册菜单的代码是:

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

 ) );
。。显示辅助菜单的代码为:

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

2 个回复
最合适的回答,由SO网友:ampt 整理而成

要仅将自定义搜索框添加到主菜单,可以传递wp\\u nav\\u menu\\u items过滤器提供的第二个参数,并检查主题位置是否为主位置

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

SO网友:Justin Kopepasah

另一种方法是将菜单slug添加到wp\\u nav\\u menu\\u items过滤器中。

例如,假设您有一个名为Header的菜单,并且始终希望此菜单(无论是否附加到主题位置)显示一个搜索框。在这种情况下,可以通过添加菜单slug来实现header, 至过滤器。

新过滤器如下所示:

add_filter( \'wp_nav_menu_header_items\', \'search_box_function\' );
注意header 新过滤器的一部分。这会告诉WordPress要向哪个菜单添加功能。

这只是解决当前问题的一种不同方法。

结束

相关推荐