将类别的wordpress模板应用于帖子

时间:2010-07-07 08:38:28

标签: php wordpress

我想要一个帖子有父类别的模板..这可能吗?如果有,请指导我一下。或者,如果有任何插件可用,请为其命名。

1 个答案:

答案 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为fooFoo类别ID为17,对于属于{{1}类的帖子1}},Wordpress将检查主题中的以下模板并使用它找到的第一个模板:

  • 类别-foo.php
  • 类别-17.php
  • category.php

因此,您需要做的就是在主题目录中创建名为Foo的模板,并将帖子的类别设置为category-foo.php,并使用{{1模板而不是默认的Foo模板。

自Wordpress 1.5以来,这种选择模板的机制已经存在,尽管多年来模板类型的完整列表已经显着增长。

可以找到Wordpress文档here