搜索页面上的自定义菜单丢失

时间:2010-11-19 07:17:42

标签: wordpress search header menu

我一直在摸着这个,所以提前感谢任何帮助。非常感谢。

我在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>
最奇怪的是。有没有其他人遇到过这个?是不是太晚了,我错过了一些明显的东西?

3 个答案:

答案 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' );