为多个CPT使用单个自定义发布类型模板

时间:2014-10-15 作者:Scott Buehler

我在一个主要的WordPress网站上工作,遇到了一个问题,我需要使用多个自定义帖子类型,但我只想为所有这些类型使用一个模板。

我找到了一个由WPSites的BradDalton编写的代码,它使用一个CPT名称。正在寻找允许多个CPT的解决方案。资料来源:http://wpsites.net/web-design/using-different-custom-single-post-templates/

我想要的是能够使用cpt-1、cpt-2、cpt-3。我不是一个PHP程序员,不太确定如何使这个数组在我的函数中工作。php

顺便说一句,我希望有is_post_type_single 好像有一个is_post_type_archive. 默认为所有CPT单模板会容易得多。

编辑理由:删除Brad的代码以尊重其版权。添加了指向源的链接。

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

不存在任何is_post_type_single 函数,因为不需要它。

is_singular() 完全符合你的目的。

示例代码使用\'template_include\' 过滤器:

add_filter( \'template_include\', function( $template ) {
  if ( is_singular( array( \'cpt-1\', \'cpt-2\', \'cpt-3\' ) ) ) {
    $locate = locate_template( \'custom-template.php\', false, false );
    if ( ! empty( $locate ) ) {
      $template = $locate;
    }
  }
  return $template;
});
当然,更改CPT的名称和自定义模板的名称。

请注意,您不必使用模板的完整路径,只需使用其名称,但文件需要位于子主题或父主题文件夹中。

SO网友:Mark Kaplun

每个CPT都应该有自己的模板。如果有通用代码,则应将其作为函数写入functions.php 或者使用不同的文件并将其包含在所有php模板中,任何更适合您的编码风格的文件都可以。

也就是说,如果您认为所有的CPT都应该以相同的方式显示,那么您可能会有太多的CPT。

结束

相关推荐