WordPress自定义文章类型分类(术语)获取指南


WordPress自定义文章类型分类(术语)获取指南

本教程将详细指导如何在wordpress中正确获取自定义文章类型的分类,即自定义分类法(custom taxonomy)的术语(terms)。不同于针对内置“分类”的`get_categories()`函数,获取自定义分类法术语需使用`get_terms()`函数,通过指定分类法名称来精确检索,确保内容展示的灵活性与准确性。

理解WordPress分类体系

在WordPress中,内容组织主要通过分类(Categories)和标签(Tags)实现。然而,当处理自定义文章类型(Custom Post Types)时,为了提供更灵活、更贴合业务逻辑的分类方式,WordPress引入了自定义分类法(Custom Taxonomies)。

  • 内置分类与标签: 这些是WordPress默认提供的分类方式,通常用于post文章类型。
    • get_categories()函数专门用于获取内置category分类法下的所有术语(即分类)。
  • 自定义分类法: 您可以通过register_taxonomy()函数为自定义文章类型创建自己的分类体系,例如为“产品”文章类型创建“产品类别”分类法。对于这些自定义分类法,get_categories()不再适用。

理解这一区别至关重要,因为错误的函数选择会导致无法获取到期望的数据。

使用get_terms()获取自定义分类法术语

要正确获取自定义文章类型所关联的自定义分类法术语,我们应该使用更通用的get_terms()函数。此函数能够检索WordPress中任何注册的分类法下的术语。

核心参数:

get_terms()函数接受一个参数数组,其中最关键的是'taxonomy'。

  • 'taxonomy':指定要查询的自定义分类法的名称。例如,如果您的自定义分类法注册时名称为'pdf_cat',则此处应传入'pdf_cat'。
  • 'hide_empty':布尔值,默认为true。如果设置为false,即使某个术语下没有关联任何文章,它也会被返回。
  • 'orderby':排序依据,例如'name'(按名称)、'slug'(按别名)、'count'(按文章数量)等。
  • 'order':排序顺序,'ASC'(升序)或'DESC'(降序)。

示例代码:获取并显示自定义分类法术语

假设您已在functions.php中注册了一个名为'pdf_cat'的自定义分类法,并将其关联到'pdf'自定义文章类型:

// functions.php 中的自定义分类法注册示例
function register_pdf_taxonomy() {
    $labels = array(
        'name'                       => _x( 'PDF分类', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'PDF分类', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'PDF分类', 'text_domain' ),
        'all_items'                  => __( '所有PDF分类', 'text_domain' ),
        'parent_item'                => __( '父级PDF分类', 'text_domain' ),
        'parent_item_colon'          => __( '父级PDF分类:', 'text_domain' ),
        'new_item_name'              => __( '新PDF分类名称', 'text_domain' ),
        'add_new_item'               => __( '添加新PDF分类', 'text_domain' ),
        'edit_item'                  => __( '编辑PDF分类', 'text_domain' ),
        'update_item'                => __( '更新PDF分类', 'text_domain' ),
        'view_item'                  => __( '查看PDF分类', 'text_domain' ),
        'separate_items_with_commas' => __( '用逗号分隔PDF分类', 'text_domain' ),
        'add_or_remove_items'        => __( '添加或移除PDF分类', 'text_domain' ),
        'choose_from_most_used'      => __( '从常用PDF分类中选择', 'text_domain' ),
        'popular_items'              => __( '热门PDF分类', 'text_domain' ),
        'search_items'               => __( '搜索PDF分类', 'text_domain' ),
        'not_found'                  => __( '未找到', 'text_domain' ),
        'no_terms'                   => __( '无PDF分类', 'text_domain' ),
        'items_list'                 => __( 'PDF分类列表', 'text_domain' ),
        'items_list_n*igation'      => __( 'PDF分类列表导航', 'text_domain' ),
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true, // 是否分层,类似分类
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_n*_menus'          => true,
        'show_tagcloud'              => false,
    );
    register_taxonomy( 'pdf_cat', array( 'pdf' ), $args ); // 将 'pdf_cat' 关联到 'pdf' 文章类型
}
add_action( 'init', 'register_pdf_taxonomy', 0 );

现在,在您的页面模板中,可以使用以下代码获取并显示'pdf_cat'分类法下的所有术语:

<?php
$args = array(
    'taxonomy'   => 'pdf_cat', // 指定自定义分类法的名称
    'hide_empty' => false,     // 显示所有术语,即使没有关联文章
    'orderby'    => 'name',    // 按名称排序
    'order'      => 'ASC',     // 升序排列
);

$terms = get_terms($args);

if (!empty($terms) && !is_wp_error($terms)) {
    echo '<select name="pdf_category_filter" onchange="location = this.value;">'; // 示例:生成一个下拉菜单
    echo '<option value="">选择一个PDF分类</option>';
    foreach ($terms as $term) {
        // 获取自定义分类法术语的链接
        $term_link = get_term_link($term);
        if (!is_wp_error($term_link)) {
            echo '<option value="' . esc_url($term_link) . '">' . esc_html($term->name) . '</option>';
        }
    }
    echo '</select>';
    /*
    // 如果您想生成列表,可以使用 <ul><li> 结构
    echo '<ul>';
    foreach ($terms as $term) {
        $term_link = get_term_link($term);
        if (!is_wp_error($term_link)) {
            echo '<li><a class="ctg" href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a></li>';
        }
    }
    echo '</ul>';
    */
} else {
    echo '<p>没有找到任何PDF分类。</p>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/2081">
                            <img src="https://img.php.cn/upload/ai_manual/000/000/000/175679957430506.png" alt="NoCode">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/2081">NoCode</a>
                            <p>美团推出的零代码应用生成平台</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="NoCode">
                                <span>180</span>
                            </div>
                        </div>
                        <a href="/ai/2081" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="NoCode">
                        </a>
                    </div>
                ';
}
?>

这段代码首先定义了get_terms()的参数,然后调用该函数获取术语列表。接着,它会遍历这些术语,为每个术语生成一个链接,并将其显示在页面上。get_term_link($term)是获取特定术语URL的正确方式。

结合自定义分类法术语查询文章

获取到自定义分类法术语后,通常的下一步是根据用户选择的术语来筛选和显示相关的自定义文章类型。这可以通过WP_Query配合tax_query参数来实现。

示例代码:根据自定义分类法术语查询文章

假设您已经从URL参数或其他方式获取到了当前选中的自定义分类法术语的slug。

<?php
// 假设从URL获取当前选中的分类法术语slug
// 例如:http://yourdomain.com/pdf-category/my-term-slug/
// 或者通过 $_GET['pdf_cat_slug'] 获取
$current_term_slug = get_query_var('term'); // 如果是分类法归档页,可以直接获取
if (empty($current_term_slug)) {
    $current_term_slug = isset($_GET['pdf_cat_slug']) ? sanitize_text_field($_GET['pdf_cat_slug']) : '';
}

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

$args = array(
    'post_type'      => 'pdf', // 指定自定义文章类型
    'posts_per_page' => 15,
    'paged'          => $paged,
    'tax_query'      => array(
        array(
            'taxonomy' => 'pdf_cat',          // 自定义分类法名称
            'field'    => 'slug',             // 根据术语的slug进行查询
            'terms'    => $current_term_slug, // 要查询的术语slug
        ),
    ),
);

// 如果没有选择特定的分类法术语,则移除 tax_query,显示所有pdf文章
if (empty($current_term_slug)) {
    unset($args['tax_query']);
}

$custom_query = new WP_Query($args);

if ($custom_query->h*e_posts()) :
    echo '<h2>' . (empty($current_term_slug) ? '所有PDF' : get_term_by('slug', $current_term_slug, 'pdf_cat')->name . '下的PDF') . '</h2>';
    echo '<ul>';
    while ($custom_query->h*e_posts()) : $custom_query->the_post();
        ?>
        <li>
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
            <?php the_excerpt(); // 显示文章摘要 ?>
        </li>
        <?php
    endwhile;
    echo '</ul>';

    // 分页链接
    echo paginate_links(array(
        'total'     => $custom_query->max_num_pages,
        'current'   => max(1, get_query_var('paged')),
        'format'    => '?paged=%#%',
        'prev_text' => __('&laquo; 上一页'),
        'next_text' => __('下一页 &raquo;'),
    ));

    wp_reset_postdata(); // 重置主查询,避免影响后续查询
else :
    echo '<p>没有找到相关文章。</p>';
endif;
?>

这段代码展示了如何使用WP_Query的tax_query参数来构建一个基于自定义分类法术语的查询。tax_query允许您指定分类法名称、查询字段(如slug、term_id)以及要匹配的术语。

注意事项与最佳实践

  1. 区分函数: 始终记住get_categories()用于WordPress内置的category分类法,而get_terms()用于所有分类法,包括您自定义的分类法。
  2. 分类法名称: 确保get_terms()中的'taxonomy'参数与您register_taxonomy()时定义的分类法名称完全一致。
  3. 错误处理: 在处理get_terms()和get_term_link()的返回值时,使用!is_wp_error()进行检查是一个好习惯,可以防止潜在的PHP错误。
  4. WP_Query vs query_posts(): 推荐使用new WP_Query()来创建自定义查询,而不是query_posts()。query_posts()会修改主查询,可能导致不预期的问题,而WP_Query创建的是一个独立的新查询,更安全、更灵活。
  5. wp_reset_postdata(): 在使用WP_Query循环文章后,务必调用wp_reset_postdata()来恢复全局$post变量到主查询的状态,以避免对页面其他部分造成影响。
  6. hide_empty参数: 根据需求决定是否显示没有关联文章的分类法术语。如果希望用户只能看到有内容的分类,请保持'hide_empty' => true(默认值)。

总结

正确获取和利用自定义文章类型的分类(即自定义分类法术语)是构建复杂WordPress网站的关键技能。通过掌握get_terms()函数来检索术语,并结合WP_Query的tax_query参数来筛选文章,您可以为用户提供强大且直观的内容导航体验。遵循本教程中的指导和最佳实践,将确保您的WordPress开发工作更加高效和健壮。

以上就是WordPress自定义文章类型分类(术语)获取指南的详细内容,更多请关注php中文网其它相关文章!


# word  # html  # go  # wordpress  # php  # 这段  # 厦门网站推广找哪家  # 制度店铺营销推广内容  # 校园电子商务的网站建设  # 没有找到  # 怎么看  # 可以使用  # 相关文章  # 您可以  # 升序  # 的是  # 您的  # 自定义  # 排列  # 区别  # pdf  # ai  # 恩施绍兴网站推广  # 营销推广方案写什么类型  # 有实力SEO优化价格  # 云南搜索关键词排名推荐  # seo关键词排名艾金手指下拉十九  # 成都网站优化做什么  # 灵宝网站建设与开发 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  作业帮网页版不用下载入口 在线问老师快速答疑  小红书网页版在线直达 小红书网页版免费登录入口  《长生:天机降世》火塔小怪大全  Golang如何操作指针参数_Go pointer参数传递规则  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  济南公交卡手机充值指南  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用  Dagster资产间数据传递与用户配置管理教程  为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践  荣耀盒子应用管理技巧  在Flask应用中安全高效地更新SQLAlchemy用户数据  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  Fedora怎么安装 Fedora Workstation安装步骤  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  《海底捞》点外卖方法  鲁班大师乓乓皮肤获取方法  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  WPS文字如何进行简繁转换  《真我》申请退款方法  如何外贸网站设计-能留住客户提升用户体验!  《微信》视频号原创声明开启方法  使用Python和NLTK从文本中高效提取名词的实用教程  大众点评了却看不到是怎么回事  LINUX怎么查看显卡信息_LINUX查看GPU状态  Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】  excel怎么计算平均值 excel平均函数*ERAGE使用教学  MongoDB聚合管道:高效统计列表中各项的文档数量  顺丰快递收费标准查询_如何查看顺丰最新收费价格  苹果SE如何开启单手模式_苹果SE单手操作功能  追剧达人如何发弹幕  Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例  以下哪一个是适应长期护理制度发展而设立的新职业  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  mail.qq.com登录入口 QQ邮箱网页版直达  j*a中赋值运算符是什么?  如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践  J*aScript模拟悬停与点击:自动化网页动态元素交互指南  mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法  t3出行如何使用微信支付  J*aScript 数值去小数位处理:多种方法与实践  如何取消数字签名  VB表达式书写规则解析  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  Python定时发送QQ消息 

 2025-11-24

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.