我如何利用wordpress模板层次结构来呈现不同的帖子模板,具体取决于类别名称/子类别?

时间:2018-08-19 01:43:29

标签: wordpress hierarchy

道歉,如果这看起来有些简单,但是我已经缩放了很多,并且没有找到解决问题的方法,

我有一个使用Wordpress设置的网站,其中的帖子可以归为以下三个类别之一:评论,视图,新闻-与这些类别名称中的每个类别名称相关的标签都是相同的。

当前,调出属于这些类别中任何一个类别的任何帖子的网页,都会看到它由single.php文件呈现。

但是,当帖子属于“评论”类别时,我想对其稍作调整。我已将原始single.php文件复制并重命名为single-post-reviews.php(此处没有自定义帖子,我只是确认,如果可能的话,我希望避免在这里出现儿童主题-不好的做法,我知道),但我没有从新文件中看到新的渲染。

我还尝试过重命名为single-reviews.php,但该方法也不起作用-有人可以告诉我我在这里到底缺少什么吗?

谢谢

1 个答案:

答案 0 :(得分:0)

Single Posts的WordPress模板层次结构未考虑当前帖子类别(可能是由于您可以具有多个类别)。因此,您有2个可行的解决方案。

1)您可以修改single.php来检查帖子类别,如果它属于reviews下的类别,请执行某些操作。如果您只是在一个或两个位置添加少量标记,或者甚至有条件地隐藏几行,这是有道理的。

2)您可以使用single_template过滤器来覆盖基于帖子类别加载的页面模板。因为我不完全知道您在做什么,所以我将详细介绍这种方法。请执行以下功能:

add_filter( 'single_template', 'so51913799_review_template' );
function so51913799_review_template( $single_template ){
    global $post;

    if( has_category( 'reviews' ) ){
        $single_template = get_stylesheet_directory() . '/single-post-reviews.php';
    }

    return $single_template;
}

如果将其放在functions.php文件中,它将利用has_category()函数(我更喜欢in_category(),因为in_category仅返回{{1} }),如果匹配,它将把has_category变量更新为$single_template。假设文件位于您的single-post-reviews.php目录中。