将多个自定义帖子类型合并到单个归档模板中

时间:2019-04-08 作者:Sunday Lalbiaknia

我有多种自定义帖子类型,即研究文件小册子。我为他们每个人都有一个归档模板,归档研究。php,归档文档。php,存档小册子。分别为php。

我需要另一个模板来显示所有这些CPT的帖子。

对于单个CPT,我使用了以下代码:

query_posts( 
  array(
    \'post_type\' => \'post_type_name_here\',
    \'posts_per_page\' => 4,
    \'paged\'=>$paged
  ) 
);
有没有办法合并主题?

1 个回复
SO网友:KFish

正如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篇文章的速度分页,这可能会产生不希望的结果,因为您正在组合多种文章类型。

相关推荐

Custom term templates

所以,我在网上做了一些研究,但没有找到可靠的答案,所以我来了。我需要为特定类别创建自定义woocommerce类别页面。例如,我有一个类别叫做“Awesome”。而不是使用由短代码生成的常规类别页面[product_category category=\"something\"], 我想为自定义特定类别页面Awesome.我发现我需要编辑taxonomy-product_cat.php 但我不知道如何将其链接到名为awesome.换句话说,我正在考虑制作php文件的自定义副本,然后将其添加为主题templ