我如何利用 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/
目录中。
抱歉,如果这对某些人来说看起来很简单,但我已经缩放了高低并且我没有找到解决我的问题的方法,即:
我有一个使用 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/
目录中。