有什么方法我可以为具有特定标签的帖子创建wordpress模板,即使我有通用帖子的模板?

时间:2015-02-03 20:51:14

标签: wordpress

我正在尝试添加标记并使用它来显示特定模板中的帖子(出于某种原因,我无法使用类别)。

我创建了一个类别slug = test,因此,稍后创建tag-test.php,但通用single.php会一直接听电话。

有什么方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:2)

tag-test.php将用于在显示test代码存档时显示帖子。对于单个帖子,将使用single.php模板。

没有本地方法可以为标记创建单个模板(以及任何分类标准)并使其开箱即用。单个模板仅支持自定义帖子类型,例如单个 - {$ post_type} .php。

但是我们可以使用过滤器为特定标记设置自定义模板,称为single_template

有了这个想法,创建自定义单页模板,让我们称之为single-test.php。只要使用标记test标记单个帖子,就会使用此模板。考虑到这一点,让我们编写函数

add_filter( 'single_template', function ( $template ) {

    global $post;

    if( has_tag( 'test', $post->ID ) ) {

        $new_template = locate_template( 'single-test.php' );       
        if ( $new_template ) {          

            return $new_template ;      

        }   

    }   

    return $template;

});

答案 1 :(得分:0)

作为一种临时解决方法,你可以使用这样的东西,但我不确定如果一个帖子在多个标签中会发生什么。据推测,它会获得第一个标记,即帖子按字母顺序或最低ID。

将此代码添加到您的single.php中,并将single.php的当前内容添加到您为ACTUAL_SINGLE_CONTENT.php创建的任何内容

<?php 
    if ( has_tag('TAG_NAME') ) {
        include(locate_template('TAG_NAME.php')); 
    } 
    elseif ( has_tag('TAGNAME_ONE') ) { 
        include(locate_template('TAG_NAME.php')); 
    } 
    elseif ( has_tag('TAG_NAME_2') ) { 
        include(locate_template('TAG_NAME.php')); 
    } 
    elseif ( has_tag('TAG_NAME_3') ) { 
        include(locate_template('TAG_NAME.php')); 
    } else {
        include(locate_template('ACTUAL_SINGLE_CONTENT.php'));
    }
    ?>