首页 > 解决方案 > 如何利用 wordpress 模板层次结构根据类别名称/标签呈现不同的帖子模板?

问题描述

抱歉,如果这对某些人来说似乎很简单,但是我已经从高到低进行了扩展,并且在这里找不到解决问题的方法,即:

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

目前,调用任何分类在这些类别下的任何单个帖子的网页都会看到它由文件 single.php 呈现。

但是,当帖子属于“评论”类别时,我想对帖子的呈现进行轻微调整。我已将原始的 single.php 文件复制并重命名为 single-post-reviews.php (这里没有自定义帖子,我只是确认一下,如果可能的话,我想在这里避免儿童主题 - 我知道这不是一个好习惯),但我没有从我的新文件中看到新的渲染。

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

谢谢,

标签: wordpresshierarchy

解决方案


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

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

single_template2)您可以使用过滤器覆盖基于帖子类别加载的页面模板。因为我不确切知道在做什么,所以我将详细说明这个方法。采取以下功能:

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返回has_category),如果它匹配,它会将$single_template变量更新为single-post-reviews.php. 这假定文件在您的/wp-content/themes/ACTIVE-THEME/目录中。


推荐阅读