我如何利用 wordpress 模板层次结构根据类别 name/slug 呈现不同的 post 模板?

How can I exploit the wordpress template hierarchy to render a different post template depending on category name/slug?

抱歉,如果这对某些人来说看起来很简单,但我已经缩放了高低并且我没有找到解决我的问题的方法,即:

我有一个使用 Wordpress 建立的网站,其中 post 可以属于以下三个类别之一:评论、观点、新闻 - 与这些类别名称中的每一个相关联的 slug 是相同的。

目前,调用属于任何这些类别的任何个人 post 的网页都会看到由文件 single.php 呈现的页面。

但是,当 post 属于 'reviews' 类别时,我想对它的渲染做一些调整。我已经将原始 single.php 文件复制并重命名为 single-post-reviews.php(这里没有自定义 posts,我只是确认一下,如果可能的话,我想,以避免在这里使用儿童主题 - 这不是好的做法,我知道),但我没有从我的新文件中看到新的渲染。

我也试过重命名为 single-reviews.php 也没有用 - 那么有人能告诉我我到底错过了什么吗?

谢谢,

Single Posts 的 WordPress 模板层次结构不考虑当前的 post 类别(可能是因为您可以有多个类别)。因此,您有 2 个可行的选择来解决您的问题。

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

2) 您可以使用 single_template 过滤器覆盖基于 post 类别加载的页面模板。因为我不完全知道你在做什么,所以我将详细说明这个方法。取以下函数:

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() function (I prefer this to in_category() 因为 in_category 只是 returns has_category 无论如何)并且如果它匹配,它会将 $single_template 变量更新为 single-post-reviews.php。这假定该文件位于您的 /wp-content/themes/ACTIVE-THEME/ 目录中。