我正在使用此功能使我的自定义帖子类型“组合”显示在档案/类别/标签页面上(在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',) ); ?>
知道我可以改变什么吗?
答案 0 :(得分:5)
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' );
答案 1 :(得分: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' );