我想要一个帖子有父类别的模板..这可能吗?如果有,请指导我一下。或者,如果有任何插件可用,请为其命名。
答案 0 :(得分:2)
自Wordpress 3.0起,wp-includes/template-loader.php
中用于选择模板的逻辑如下所示:
if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) :
$template = false;
if ( is_404() && $template = get_404_template() ) :
elseif ( is_search() && $template = get_search_template() ) :
elseif ( is_tax() && $template = get_taxonomy_template() ) :
elseif ( is_front_page() && $template = get_front_page_template() ) :
elseif ( is_home() && $template = get_home_template() ) :
elseif ( is_attachment() && $template = get_attachment_template() ) :
remove_filter('the_content', 'prepend_attachment');
elseif ( is_single() && $template = get_single_template() ) :
elseif ( is_page() && $template = get_page_template() ) :
elseif ( is_category() && $template = get_category_template() ) :
elseif ( is_tag() && $template = get_tag_template() ) :
elseif ( is_author() && $template = get_author_template() ) :
elseif ( is_date() && $template = get_date_template() ) :
elseif ( is_archive() && $template = get_archive_template() ) :
elseif ( is_comments_popup() && $template = get_comments_popup_template() ) :
elseif ( is_paged() && $template = get_paged_template() ) :
else :
$template = get_index_template();
endif;
if ( $template = apply_filters( 'template_include', $template ) )
include( $template );
return;
endif;
在wp-includes / theme.php中检查get_category_template()
,我们看到:
function get_category_template() {
$cat_ID = absint( get_query_var('cat') );
$category = get_category( $cat_ID );
$templates = array();
if ( !is_wp_error($category) )
$templates[] = "category-{$category->slug}.php";
$templates[] = "category-$cat_ID.php";
$templates[] = "category.php";
$template = locate_template($templates);
return apply_filters('category_template', $template);
}
假设您的类别为Foo
,它的slug为foo
,Foo
类别ID为17
,对于属于{{1}类的帖子1}},Wordpress将检查主题中的以下模板并使用它找到的第一个模板:
因此,您需要做的就是在主题目录中创建名为Foo
的模板,并将帖子的类别设置为category-foo.php
,并使用{{1模板而不是默认的Foo
模板。
自Wordpress 1.5以来,这种选择模板的机制已经存在,尽管多年来模板类型的完整列表已经显着增长。
可以找到Wordpress文档here。