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

DDD
发布: 2025-09-25 16:18:23
原创
471人浏览过

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()函数接受三个主要参数:

巧文书
巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 61
查看详情 巧文书
  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'参数灵活排除不需要的分类。这种方法不仅提升了分类显示的灵活性,也使得网站内容的组织和呈现更加符合设计预期。

以上就是WordPress中按菜单顺序显示文章分类的技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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