【发布时间】:2010-06-25 01:10:35
【问题描述】:
我有一个类别模板:category-projects.php
此类别有子类别,但它们是指模板 category.php 以获取说明,而不是父类别。如何让子类别按照模板引用的级联顺序引用父类别模板?
*注意,我说的是类别级别的网址,而不是帖子。
【问题讨论】:
标签: wordpress templates categories
我有一个类别模板:category-projects.php
此类别有子类别,但它们是指模板 category.php 以获取说明,而不是父类别。如何让子类别按照模板引用的级联顺序引用父类别模板?
*注意,我说的是类别级别的网址,而不是帖子。
【问题讨论】:
标签: wordpress templates categories
一种方法是在您的functions.php 文件中挂钩template_redirect 操作:
function myTemplateSelect() {
if (is_category() && !is_feed()) {
if (is_category(get_cat_id('projects')) || cat_is_ancestor_of(get_cat_id('projects'), get_query_var('cat'))) {
load_template(TEMPLATEPATH . '/category-projects.php');
exit;
}
}
}
add_action('template_redirect', 'myTemplateSelect');
【讨论】:
Richard 的回答确实有效,但会严重干扰其他插件。
我使用add_filter 和template_include 找到了一个更好的选择,如下例所示
add_filter( 'template_include', 'my_callback' );
function my_callback( $original_template ) {
if ( some_condition() ) {
return SOME_PATH . '/some-custom-file.php';
} else {
return $original_template;
}
}
感谢https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
【讨论】:
据我所知;根据 wp 模板层次结构,category-samplecat.php 仅适用于具有 slug 名称“samplecat”的类别。所以这种方式是不可能的。
但是在 category.php 文件(适用于没有特殊模板文件的每个类别)中,您可以有条件地检查当前类别是否是“项目”的子项(在我的 answer 中使用此方法到您的其他问题),如果是这样,您可以对其应用相同的 category-projects.php 结构或包含 category-projects.php。
【讨论】: