正如Jacob Peattle提到的,您不应该在自定义归档模板中使用query\\u帖子,这是多余的,因为WP已经在为您查询这些帖子了。你真正需要的是pre_get_posts
(https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts). 这将允许您在执行主查询之前有条件地修改其参数。此外,由于您正在有效地对所有4个CPT执行相同的查询,因此没有必要使用4个单独的模板来执行此操作,而是查看template_include
滤器https://codex.wordpress.org/Plugin_API/Filter_Reference/template_include
将以下内容添加到函数文件中。。。
//Modify the main query
function custom_archive_query($query){
if(is_admin() || !$query->is_main_query()){
return;
}
$cpts = array("research","documents","booklets");
if(is_post_type_archive($cpts)){
$query->set(\'post_type\', $cpts);
return;
}
}
add_action(\'pre_get_posts\', \'custom_archive_query\');
//Add the template redirect
function custom_archive_template($template){
$cpts = array("research","documents","booklets");
if(is_post_type_archive($cpts)){
$new_template = locate_template( array( \'custom_archive-template.php\' ) );
if(!empty($new_template)) return $new_template;
}
return $template;
}
add_filter(\'template_include\', \'custom_archive_template\');
另外,您可能需要调整您的查询,而不仅仅是此示例,显然需要调整您的自定义帖子类型名称以匹配。您最初的查询是以每页4篇文章的速度分页,这可能会产生不希望的结果,因为您正在组合多种文章类型。