类别页面上未显示主菜单

时间:2014-04-25 作者:Pilgrimiv

我正在创建一个基于blankslate/Bootstrap的主题,并且在分类页面上出现了主导航的问题(似乎在其他地方都出现了,ok)。

在标题中。php:

<div class="collapse navbar-collapse" id="navbar-collapse-1">
                      <?php
                      wp_nav_menu( array(
                      \'menu\'              => \'primary\',
                      \'theme_location\'    => \'primary\',
                      \'depth\'             => 2,
                      \'menu_class\'        => \'nav navbar-nav\',
                      \'fallback_cb\'       => \'wp_bootstrap_navwalker::fallback\',
                      \'walker\'            => new wp_bootstrap_navwalker())
                      );
                      ?>
在函数中。php

// Register Custom Navigation Walker
require_once(\'wp_bootstrap_navwalker.php\');
register_nav_menus( array(
\'primary\' => __( \'Primary Menu\', \'themename\' ),
) );
如有任何帮助或建议,将不胜感激

3 个回复
SO网友:AndyDeGroo

我知道这个问题已经很老了,但由于还没有答案,WordPress支持论坛上也有许多类似的问题,我最好分享我的发现,也许可以帮助别人。

菜单消失的问题可能是由于插件或主题中的代码错误地修改全局$wp_query 对象使用pre_get_posts 过滤器挂钩。

我发现导致问题的代码在主题中:

function namespace_add_custom_types( $query ) {
  if( is_category() || is_tag() && empty( $query->query_vars[\'suppress_filters\'] ) ) {

    $query->set( \'post_type\', array(
                \'post\',
                \'projects\',
            ));
        return $query;
    }
}
add_filter( \'pre_get_posts\', \'namespace_add_custom_types\' );
此代码段本应将自定义帖子类型添加到类别存档中,但它也会影响中的查询wp_nav_menu.

要解决此问题,我必须更正if 条件:

function namespace_add_custom_types( $query ) {
  if( is_archive() && (is_category() || is_tag()) && empty( $query->query_vars[\'suppress_filters\'] ) ) {

    $query->set( \'post_type\', array(
                \'post\',
                \'projects\',
            ));
        return $query;
    }
}
add_filter( \'pre_get_posts\', \'namespace_add_custom_types\' );
YMMV和原因可能完全不同,但这就是我如何修复类别模板中缺少菜单的问题。

SO网友:Alex

对我来说

    if ($q->get(\'post_type\') != \'post\') {
        return;
    }
在pre\\u get\\u posts的处理程序中修复了它。

SO网友:Adriana Hernández

我遇到了同样的问题,因为我正在添加过滤器pre_get_posts 并且错过了将菜单项传递给帖子的机会。我就是这样解决的:

之前,我在我的主题中有这个代码functions.php 我正在用$post_type 仅,不传递菜单项,菜单未出现:

add_filter( \'pre_get_posts\', \'query_post_type\' );
function query_post_type( $query ) {
    if ( is_category() ) {
        $post_type = get_query_var( \'post_type\' );
        if ( $post_type ) {
            $post_type = $post_type;
        } else {
            $post_type = array( \'nav_menu_item\', \'post\', \'departments\' );
        }
        $query->set( \'post_type\', $post_type );

        return $query;
    }
}
我解决了通过\'nav_menu_item\' 具体如下:

add_filter( \'pre_get_posts\', \'query_post_type\' );
function query_post_type( $query ) {
    if ( is_category() ) {
        $post_type = get_query_var( \'post_type\' );
        if ( $post_type ) {
            $post_type = array( \'nav_menu_item\', $post_type );
        } else {
            $post_type = array( \'nav_menu_item\', \'post\', \'departments\' );
        }
        $query->set( \'post_type\', $post_type );

        return $query;
    }
}

结束