1

我正在使用此功能使我的自定义帖子类型“投资组合”显示在档案/类别/标签页面上(在 functions.php 中):

function namespace_add_custom_types( $query ) {
  if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    $query->set( 'post_type', array('post', 'portfolio'));
      return $query;
    }
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' 

问题是由于某种原因它使我的导航菜单消失了。这是导航菜单的代码(在 header.php 中):

<?php wp_nav_menu(array( 'theme_location'  => 'primary', 'sort_column' => 'menu_order', 'menu_class' => 'nav-menu', 'container_class' => 'nav-menu',) ); ?>

知道我可以改变什么吗?

4

2 回答 2

7

WordPress 导航菜单由帖子nav_menu_item类型的帖子组成,当您的函数更改所有查询的帖子类型时,没有可显示的内容。

解决方案:通过检查仅修改主查询is_main_query,例如:

if( is_category() && $query->is_main_query() ) {
    // do stuff
}

PS:pre_get_posts是一个动作钩子,所以你应该使用add_action而不是add_filter

add_action( 'pre_get_posts', 'namespace_add_custom_types' );
于 2013-06-21T15:51:25.273 回答
0

将此:添加'nav_menu_item'到您的 functions.php 文件中的数组中。最终代码如下所示:

function namespace_add_custom_types( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post', 'nav_menu_item', 'portfolio'
));
return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
于 2013-12-27T22:45:04.290 回答