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' ) );
#1 楼
要将自定义搜索框仅添加到主菜单,您可以传递wp_nav_menu_items过滤器提供的第二个参数,并检查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;
}
#2 楼
另一种执行此方法的方法是将菜单项添加到wp_nav_menu_items过滤器。例如,假设您有一个名为Header的菜单,并且始终需要此菜单(无论它是否附加到主题位置或否)显示搜索框。您可以通过在过滤器中添加菜单项slug(在这种情况下为header
)来实现。新的过滤器如下:
add_filter('wp_nav_menu_header_items','search_box_function');
注意新过滤器的
header
部分。这告诉WordPress将功能添加到哪个菜单。这只是解决当前问题的一种不同方法。
评论
请参阅此页面上来自@oshi的项目,该项目已发给您。
–halfer
13年1月2日,下午1:39
评论
谢谢,太好了……只是一个新手问题-代码中的10、2做什么?
–cannyboy
2010-09-23 14:45
10是优先级(默认是10),2是我们要过滤的函数接受的参数数量。
–稀有
2010-09-23 15:25
@ ampt,是的,我尝试过。有效。几乎。登录后,第二个菜单链接消失了,我该如何解决?
–user9182
2011年10月4日23:59
请注意,自WP 3.8起,变量为$ args-> menu而不是$ args-> theme_location
–阿兰·贾科梅特(Alain Jacomet Forte)
2014年3月26日21:00
@AlainJacometForte实际上,$ args-> menu返回菜单的数字ID,而$ args-> theme_location返回字符串,因此此答案仍然是正确的。如果要比较字符串,则没有任何变化。
–马库斯
2014年5月25日15:37