我一直在摸着这个,所以提前感谢任何帮助。非常感谢。
我在WP 3.0.1中有一个菜单,我在header.php中使用:
调用wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) );
它在搜索结果的每个分开页面上显示正常。 search.php文件以标准get_header();
开头,因此它必须是wp_nav_menu
代码吗?但是没有任何内容包含在is_search()
条件或任何内容中。
输出HTML应如下所示:
<div class="menu-header">
<ul id="menu-main-menu" class="menu">
<li class="menu-item">
<a>Link 1</a>
</li>
<li class="menu-item">
<a>Link 2</a>
</li>
</ul>
</div>
但相反,它会到<ul>
并且不会输出任何<li>
:
<div class="menu-header">
<ul id="menu-main-menu" class="menu">
</ul>
</div>
最奇怪的是。有没有其他人遇到过这个?是不是太晚了,我错过了一些明显的东西?
答案 0 :(得分:4)
您可能设置了一个过滤器,该过滤器拦截负责生成导航菜单链接的查询,或者更具体地说,覆盖查询对象所需的“nav_menu_item”帖子类型。
答案 1 :(得分:4)
试试这段代码:
function menu_fix_on_search_page( $query ) {
if(is_search()){
$query->set( 'post_type', array(
'post', 'nav_menu_item'
));
return $query;
}
}
add_filter( 'pre_get_posts', 'menu_fix_on_search_page' );
将其粘贴到主题文件中的functions.php中。
答案 2 :(得分:4)
@ ZoulRic的代码工作正常,但它破坏了媒体库中的搜索功能。为了防止这种情况,请添加:
if( !is_admin() )
就在最后一行之前,所以你的代码如下:
function menu_fix_on_search_page( $query ) {
if(is_search()){
$query->set( 'post_type', array(
'attachment', 'post', 'nav_menu_item', 'film', 'music'
));
return $query;
}
}
if( !is_admin() ) add_filter( 'pre_get_posts', 'menu_fix_on_search_page' );