在我最近的项目中,我正在处理一个网站,该网站包括数十种自定义分类法、两种帖子类型、内容等,并且需要为不同的作者或标记使用不同的模板。
现在,我的模板文件夹有大约70个用于模板的php文件,这真是令人困惑。
我注意到一些主题(如twentyseven)将模板文件存储在文件夹中,并在循环中调用它们,如下所示:
get_template_part( \'template-parts/post/content\', get_post_format() );
但这是在循环中。我的模板完全不同,所以我不能使用上面的解决方案,因为我需要使用条件来修改任何不属于循环的内容。
例如,如果我有3种帖子类型,我必须保存3个模板文件:
single-type1.php
, single-type2.php
和single-type3.php
.
这些模板在循环内外都是完全不同的(甚至是不同的侧栏),所以我不能只做一个single.php
并在循环中调用适当的post类型。
除了将自定义模板文件直接保存在主题文件夹中之外,还有其他方法可以解决WordPress的自定义模板文件问题吗?
最合适的回答,由SO网友:Dave Romsey 整理而成
页面模板可以存储在page-templates
或templates
主题中的子目录,但这不适用于自定义帖子类型或分类模板。
幸运的是template_include
过滤器可用于更改将加载的模板。在下面的示例中,模板文件存储在/theme-name/templates/
目录
/**
* Filters the path of the current template before including it.
* @param string $template The path of the template to include.
*/
add_filter( \'template_include\', \'wpse_template_include\' );
function wpse_template_include( $template ) {
// Handle taxonomy templates.
$taxonomy = get_query_var( \'taxonomy\' );
if ( is_tax() && $taxonomy ) {
$file = get_theme_file_path() . \'/templates/taxonomy-\' . $taxonomy . \'.php\';
if ( file_exists( $file ) ) {
$template = $file;
}
}
// Handle post type archives and singular templates.
$post_type = get_post_type();
if ( ! $post_type ) {
return $template;
}
if ( is_archive() ) {
$file = get_theme_file_path() . \'/templates/archive-\' . $post_type . \'.php\';
if ( file_exists( $file ) ) {
$template = $file;
}
}
if ( is_singular() ) {
$file = get_theme_file_path() . \'/templates/single-\' . $post_type . \'.php\';
if ( file_exists( $file ) ) {
$template = $file;
}
}
return $template;
}