要更改主查询,首选方法是使用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将查询您所有的帖子类型,它将知道它在哪个页面上,以及存在多少页面,因此模板中的分页功能应该可以正常工作,无需做任何进一步的操作。