wordpress - 如何利用 wordpress 模板层次结构根据类别名称/标签呈现不同的帖子模板?
问题描述
抱歉,如果这对某些人来说似乎很简单,但是我已经从高到低进行了扩展,并且在这里找不到解决问题的方法,即:
我有一个使用 Wordpress 建立的网站,其中的帖子可以属于以下三个类别之一:评论、视图、新闻 - 与这些类别名称中的每一个相关的 slug 都是相同的。
目前,调用任何分类在这些类别下的任何单个帖子的网页都会看到它由文件 single.php 呈现。
但是,当帖子属于“评论”类别时,我想对帖子的呈现进行轻微调整。我已将原始的 single.php 文件复制并重命名为 single-post-reviews.php (这里没有自定义帖子,我只是确认一下,如果可能的话,我想在这里避免儿童主题 - 我知道这不是一个好习惯),但我没有从我的新文件中看到新的渲染。
我也尝试重命名为 single-reviews.php,但也没有用 - 所以有人能告诉我我到底错过了什么吗?
谢谢,
解决方案
单个帖子的 WordPress 模板层次结构不考虑当前帖子类别(可能是因为您可以有多个类别)。因此,您有 2 个可行的选项来解决您的问题。
1)您可以修改single.php
以检查帖子类别,如果它被归类为reviews
,请执行一些操作。如果您只是在一个或两个地方添加少量标记,或者甚至有条件地隐藏几行,这是有道理的。
single_template
2)您可以使用过滤器覆盖基于帖子类别加载的页面模板。因为我不确切知道你在做什么,所以我将详细说明这个方法。采取以下功能:
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/
目录中。
推荐阅读
- java - 用户的最后三个分数未在 android studio 中显示
- php - Laravel:命令 php artisan route:list 生成错误:未找到 AuthController
- oracle - oracle apex 中的字符串连接
- linux - Azure IoT 存储绑定到设备本地存储
- arrays - 如何从多行数组中提取唯一组合列表,其中只有每两个连续行是组合的基础?
- rust - 为什么我的 RefCell 的零成本替代方案不是实现内部可变性的标准方法?
- java - Java中不同对象解析json文件的常用方法
- python - jupyter notebook seaborn 和 statsmodels & kernel 问题的导入问题
- javascript - 来自 HTML 输入的 JS 输出总和
- python - 使用 max 和 lambda 查找列表元素的 GCD 的问题