如何在 WordPress 主题中正确显示文章所属的子分类
技术百科
霞舞
发布时间:2026-01-17
浏览: 次 本文详解如何在 wordpress 主题循环中精准获取并展示每篇文章**实际分配的子分类名称**,避免误显所有子分类,并提供基于 `get_the_category()` 与 `cat_is_ancestor_of()` 的健壮实现方案。
在 WordPress 主题开发中,常需在列表页(如博客首页或专题归档)中同时展示文章标题、摘要及其专属的子分类。但初学者易陷入一个典型误区:使用 get_categories( array('child_of' => $parent_id) ) 获取全部子分类,再统一输出——这会导致每篇文章都显示相同的所有子分类,而非该文章实际归属的那一个(或几个)。
正确做法是:对每篇文章单独调用 get_the_category( $post->ID ),它返回当前文章真实分配的所有分类对象数组(含父类与子类),再结合逻辑筛选出目标子分类。
✅ 推荐实现方式(兼顾准确性与灵活性)
以下代码片段可直接嵌入主题模板(如 index.php 或自定义页面模板),用于在指定父分类(ID=1)下的文章列表中,仅显示每篇文章已分配且属于该父分类体系的子分类名称:
8,
'category' => 1, // 父分类 ID
'post_status' => 'publish'
);
$myposts = get_posts($args);
foreach ($myposts as $post) : setup_postdata($post);
?>
ID);
$parent_id = 1; // 此处设为你的父分类 ID(即筛选依据)
foreach ($categories as $category) {
// 仅当该分类是 $parent_id 的直系或间接子分类时才显示
if (cat_is_ancestor_of($parent_id, $category->term_id)) {
echo esc_html($category->name) . ' ';
}
}
?>
">阅读更多
⚠️ 关键注意事项
-
get_the_category() 返回的是文章实际所属分类,不是全站子分类列表,因
此天然规避了“重复显示所有子类”的问题;
- cat_is_ancestor_of($ancestor, $descendant) 是 WordPress 官方推荐的层级判断函数,支持多级嵌套(如 父 → 子 → 孙),比手动比对 category_parent 更可靠;
- 务必使用 esc_html() 对输出的分类名进行转义,防止 XSS 风险;
- wp_reset_postdata() 不可省略,尤其在 get_posts() 循环后,否则可能干扰主循环或侧边栏小工具中的分类查询;
- 若每篇文章仅应显示一个子分类(常见于单分类架构),可在循环内添加 break; 提前退出;若允许多个,则保持现有结构即可。
通过以上方法,你将获得语义清晰、性能稳定且符合 WordPress 最佳实践的子分类展示逻辑,大幅提升主题的专业性与可维护性。
# wordpress
# 工具
# word
# go
# 循环
# 对象
# html
# 子类
# 架构
# php
# break
# xss
# 父类
# Array
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何使用Golang进行HTTP服务性能测试_测量
- Linux如何安装Golang环境_Linux下G
- C++如何将C风格字符串(char*)转换为std
- Mac如何设置动态壁纸?(让桌面动起来)
- 如何使用Golang table-driven基准
- 如何使用Golang defer优化性能_减少不必
- Windows电脑如何截屏?(四种快捷方法)
- Win11怎么设置ip地址_Windows 11手
- PythonPandas数据分析项目教程_时间序列
- Win10如何优化内存使用_Win10内存优化技巧
- 电脑无法识别U盘怎么办 Windows磁盘管理与驱
- 为什么Go需要go mod文件_Go go mod
- Linux怎么修改用户密码_Linux系统pass
- 如何在Golang中编写端到端测试_Golang
- 如何使用Golang写入二进制文件_Golang
- php中常量能用::访问吗_类常量与作用域操作符使
- php命令行怎么运行_通过CLI模式执行PHP脚本
- 如何使用Golang处理网络超时错误_Golang
- c++中的Tag Dispatching是什么_c
- LINUX怎么设置系统语言_LINUX修改中文环境
- Python多线程使用规范_线程安全解析【教程】
- Drupal 中 HTML 链接被重复转义导致渲染
- c# 在ASP.NET Core中管理和取消后台任
- Golang如何遍历目录文件_Golang fil
- Windows10怎么查看系统激活状态_Windo
- Win11时间怎么同步到原子钟 Win11高精度时
- 如何优化Golang程序CPU性能_Golang
- Win11怎么查看激活状态_查询Windows 1
- 如何使用Golang实现路由参数绑定_使用Mux和
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- 如何在Golang中处理模块包路径变化_Golan
- 本地php环境出现502错误_nginx或apac
- Win11无法识别耳机怎么办_解决Win11插耳机
- 如何将竖排文本文件转换为横排字符串
- MAC怎么使用表情符号面板_MAC Emoji快捷
- Ajax提交表单PHP怎么接收_处理Ajax发送的
- php增删改查在php8里有什么变化_新特性对cu
- Windows服务启动类型恢复方法_错误修改导致的
- Win11怎么关闭自动调节屏幕亮度_Windows
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- Django 测试数据库表缺失与字段未创建问题的完
- Windows笔记本无法进入睡眠模式怎么办?(电源
- php查询数据怎么导出csv_查询结果转csv文件
- Go语言中CookieJar的持久化机制解析:内存
- Win11怎么查看已连接wifi密码 Win11查
- C++如何使用std::optional?(处理可
- Win11怎么恢复出厂设置_Win11重置此电脑保
- Linux如何使用grep搜索文件内容_Linux
- ACF 教程:正确更新嵌套在多层 Group 字段
- C#如何在一个XML文件中查找并替换文本内容


QQ客服