要更改主查询,首选方法是使用pre_get_posts
行动而不是呼叫query_posts
在模板中。在这一点上,可以很有把握地说query_posts
在模板中是完全错误的,尽管遗憾的是,你会在网上看到它的一百万个例子。
主查询发生在加载模板之前,WordPress根据该查询的结果决定要做什么,因此在模板中处理查询将充满潜在的错误。运行覆盖原始查询的第二个查询也是浪费资源,最好在查询发生之前更改查询。
所以这里我们使用conditional tags 检查我们是否在头版并运行主查询。需要注意的是,此操作是在每个查询上执行的,因此我们必须明确要更改哪个查询。
function wpa_post_types_front_page( $query ) {
if ( $query->is_front_page() && $query->is_main_query() ) {
$query->set( \'post_type\', array(
\'post\',
\'product\',
\'flights\',
\'touristdestinations\'
) );
}
}
add_action( \'pre_get_posts\', \'wpa_post_types_front_page\' );
现在WordPress将查询您所有的帖子类型,它将知道它在哪个页面上,以及存在多少页面,因此模板中的分页功能应该可以正常工作,无需做任何进一步的操作。