我假设“类别的直接子类别”是指“直接分配给类别的帖子”,而不是“分配给指定类别的子类别的帖子”。
答案在法典中:
使用类别id显示具有此类别(不是该类别的子类别)的帖子:
$query = new WP_Query( \'category__in=4\' );
http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters
第二,不要使用
query_posts()
. 它打击了好几个
globals
把事情搞得一团糟。使用
WP_Query
.
$q = new WP_Query(
array(
\'category__in\' => $cat,
)
);
这将创建一个辅助循环。要更改主查询,您需要连接到
pre_get_posts
, 正如《法典》中所解释的
query_posts()
页码:
query_posts()
通过用查询的新实例替换页面的主查询来修改页面的主查询是一种过于简单且有问题的方式。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。任何现代WP代码都应该使用更可靠的方法,例如pre_get_posts
挂钩,用于此目的。
换句话说:
function no_cat_kids_wpse_143042( $query ) {
if ( $query->is_main_query() && $query->is_front_page() ) {
$query->set( \'category__in\', 123 );
}
}
add_action( \'pre_get_posts\', \'no_cat_kids_wpse_143042\' );
我不知道你需要什么条件,
if ( $query->is_main_query() && $query->is_front_page() )
-- 我不知道你是如何生成
$cat
变量,但这就是想法。
将该代码放入functions.php
或插件。它必须在加载页面模板之前执行,才能影响主查询。