我正在尝试添加标记并使用它来显示特定模板中的帖子(出于某种原因,我无法使用类别)。
我创建了一个类别slug = test,因此,稍后创建tag-test.php
,但通用single.php
会一直接听电话。
有什么方法可以做到这一点吗?
答案 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'));
}
?>