0

0

WordPress中按菜单顺序显示文章分类的技巧

DDD

DDD

发布时间:2025-09-25 16:18:23

|

484人浏览过

|

来源于php中文网

原创

WordPress中按菜单顺序显示文章分类的技巧

本文将指导如何在WordPress中按自定义菜单顺序显示文章分类,并排除特定分类。我们将解释为何get_the_category()不适用于排序需求,并重点介绍如何利用wp_get_post_terms()函数及其orderby和exclude参数来高效实现这一功能,从而提升分类显示的灵活性和控制力。

wordpress开发中,我们经常需要获取并显示文章所属的分类。然而,当需要按照特定顺序(例如,在后台菜单中定义的“菜单顺序”)来展示这些分类,并可能需要排除某些分类时,一些常用的函数可能无法满足需求。本文将深入探讨如何优雅地解决这一问题。

理解get_the_category()的局限性

get_the_category()是WordPress中一个非常常用的函数,用于获取当前文章所属的所有分类。它返回一个分类对象数组,包含了分类的ID、名称、别名等信息。然而,该函数的一个主要局限性在于它不提供直接的排序参数。这意味着你无法通过它来控制分类的显示顺序,它通常会按照默认的ID或名称顺序返回结果。

考虑以下常见的代码片段:

<?php
$categories = get_the_category();
foreach($categories as $category) {
    // 假设用户希望排除ID为14的分类,并按菜单顺序显示
    if($category->cat_ID !== 14){
        echo esc_html($category->cat_name);
    }
}
?>

这段代码能够获取分类并排除特定ID,但它无法实现“菜单顺序”的排序。如果你的分类在后台菜单中经过了拖拽排序,get_the_category()无法感知并应用这种顺序。

wp_get_post_terms():实现自定义排序与排除的核心

为了克服get_the_category()的局限性,WordPress提供了更强大、更灵活的函数:wp_get_post_terms()。这个函数设计用于获取与文章关联的任何分类法术语(包括分类、标签、自定义分类法等),并支持丰富的查询参数,包括排序方式和排除项。

使用wp_get_post_terms()来按菜单顺序显示分类并排除特定项的核心代码如下:

<?php
$terms = wp_get_post_terms( get_the_id(), 'category', array(
    'orderby' => 'term_order', // 按菜单顺序排序
    'exclude' => array(14)     // 排除ID为14的分类
));
?>

详细参数解析与应用

wp_get_post_terms()函数接受三个主要参数:

In3D
In3D

把真人变成化身,创建逼真且可自定义的虚拟角色

下载
  1. $post_id:

    • 此参数指定要获取其分类术语的文章ID。通常,我们会使用get_the_id()来动态获取当前循环中文章的ID。
  2. $taxonomy:

    • 此参数指定要查询的分类法。对于文章的默认分类,我们使用字符串'category'。如果你在使用自定义分类法,则应替换为该分类法的名称。
  3. $args (数组):

    • 这是一个关联数组,用于定义查询的各种选项。
    • 'orderby' =youjiankuohaophpcn 'term_order': 这是实现“菜单顺序”的关键。在WordPress中,当分类术语被用于菜单项并手动排序时,其term_order字段会记录这个顺序。通过设置orderby为'term_order',我们可以确保获取到的分类术语按照你在后台菜单中定义的顺序排列
    • 'exclude' => array(14): 此参数接受一个ID数组,用于指定要从结果中排除的分类术语。在示例中,ID为14的分类将被排除。你可以根据需要添加多个ID,例如array(14, 20, 35)。

完整示例代码

结合上述参数,以下是一个完整的代码示例,演示如何获取、遍历并显示按菜单顺序排序且排除特定分类的文章分类:

<?php
// 确保在WordPress循环或有文章ID可用的上下文中运行
if ( have_posts() ) : the_post();

    $post_id = get_the_id(); // 获取当前文章ID

    // 使用 wp_get_post_terms 获取按菜单顺序排序并排除特定分类的术语
    $categories = wp_get_post_terms( $post_id, 'category', array(
        'orderby' => 'term_order', // 按菜单顺序排序
        'exclude' => array(14)     // 排除ID为14的分类
    ));

    // 检查结果是否为空或是否存在错误
    if ( ! empty( $categories ) && ! is_wp_error( $categories ) ) {
        echo '<h4>文章分类:</h4>';
        echo '<ul class="post-categories-menu-ordered">';
        foreach ( $categories as $category ) {
            // 生成分类链接并安全输出名称
            echo '<li><a href="' . esc_url( get_term_link( $category->term_id, 'category' ) ) . '">' . esc_html( $category->name ) . '</a></li>';
        }
        echo '</ul>';
    } else {
        echo '<p>当前文章没有符合条件的分类。</p>';
    }

endif; // 结束文章循环
?>

注意事项与扩展思考

  • 错误处理与空结果: 始终建议在使用wp_get_post_terms()的结果之前,通过! empty()和! is_wp_error()进行检查。这可以防止在没有分类或查询失败时出现PHP错误。
  • 输出格式: 示例代码中将分类显示为带有链接的无序列表。你可以根据网站的设计和需求,自由调整输出的HTML结构和样式。
  • 其他排序选项: orderby参数非常灵活,除了'term_order',还支持其他值,如:
    • 'name':按分类名称字母顺序。
    • 'slug':按分类别名字母顺序。
    • 'id':按分类ID。
    • 'count':按分类下文章数量。
    • 'none':不排序。
  • 包含特定分类: 如果你只想显示特定的几个分类,可以使用'include' => array(2, 5, 8)参数,它会覆盖exclude参数。
  • 性能考量: 对于大多数网站而言,wp_get_post_terms()的性能开销可以忽略不计。但在处理大量分类或在极高流量的场景下,可以考虑使用WordPress的转瞬缓存(Transients API)来缓存查询结果,以进一步优化性能。

总结

通过本文的介绍,我们了解到get_the_category()在处理分类排序方面的局限性,并掌握了使用wp_get_post_terms()函数及其orderby和exclude参数来精确控制WordPress文章分类显示的方法。利用'orderby' => 'term_order',开发者能够轻松实现按后台菜单顺序排列分类的需求,同时通过'exclude'参数灵活排除不需要的分类。这种方法不仅提升了分类显示的灵活性,也使得网站内容的组织和呈现更加符合设计预期。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1249

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1206

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

194

2025.07.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号