这是因为query_posts
将原始查询替换为新查询(包括列出的所有帖子类型)。
对于other reasons, 您不应该使用query_posts
!
出于您的目的,您可以使用pre_get_posts
钩这是在查询数据库中的帖子之前激发的。“主查询”是由“url”确定的查询(即指向首页的url,?post_type=
查询变量等)。
通过连接到这一点,我们可以有条件地更改查询(即,如果我们在头版,那么我们可以告诉WordPress获取上述所有帖子类型)。
query_posts
另一方面,只有在加载模板时才会触发(所以在WordPress执行“主查询”之后)。它丢弃了这个主查询并替换了它——一路上造成了巨大的破坏(最显著的是分页)。如果你没有reset the query 使用后query_posts
你可能会让自己更加头疼。
add_action(\'pre_get_posts\',\'wpse57309_alter_front_page_query\');
function wpse57309_alter_front_page_query( $query ){
if( $query->is_main_query() && is_front_page() ){
if( !$query->get(\'post_type\') ){
//post type is not set, the default will be an array of them:
$query->set(\'post_type\',array( \'movies\', \'music\', \'featued\'));
}
}
}
然后可以删除
query_posts
从模板中。
请记住,urlwww.example.com?post_type=xyz
, 将查询帖子类型为“xyz”的帖子,如果模板存在,将使用archive-xyz.php
作为模板,根据template hierarchy.
**实际上!$query->get(\'post_type\')
条件可能没有必要,因为如果设置了条件,WordPress会将其解释为post类型的存档,而不是首页*