多亏了这里的一些帮助,我设法将自定义搜索框添加到主菜单中...通过将其添加到主题的功能中。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' ) ); 


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


评论


谢谢,太好了……只是一个新手问题-代码中的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

#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