全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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_navigation'      => __( 'PDF分类列表导航', 'text_domain' ),
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true, // 是否分层,类似分类
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => false,
    );
    register_taxonomy( 'pdf_cat', array( 'pdf' ), $args ); // 将 'pdf_cat' 关联到 'pdf' 文章类型
}
add_action( 'init', 'register_pdf_taxonomy', 0 );

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

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

$terms = get_terms($args);

if (!empty($terms) && !is_wp_error($terms)) {
    echo '';
    /*
    // 如果您想生成列表,可以使用 
  • 结构 echo '
      '; foreach ($terms as $term) { $term_link = get_term_link($term); if (!is_wp_error($term_link)) { echo '
    • ' . esc_html($term->name) . '
    • '; } } echo '
    '; */ } else { echo '

    没有找到任何PDF分类。

    '; } ?>

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

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

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

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

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

 '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->have_posts()) :
    echo '

' . (empty($current_term_slug) ? '所有PDF' : get_term_by('slug', $current_term_slug, 'pdf_cat')->name . '下的PDF') . '

'; echo '
    '; while ($custom_query->have_posts()) : $custom_query->the_post(); ?>
  • ">

  • '; // 分页链接 echo paginate_links(array( 'total' => $custom_query->max_num_pages, 'current' => max(1, get_query_var('paged')), 'format' => '?paged=%#%', 'prev_text' => __('« 上一页'), 'next_text' => __('下一页 »'), )); wp_reset_postdata(); // 重置主查询,避免影响后续查询 else : echo '

    没有找到相关文章。

    '; 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开发工作更加高效和健壮。


# php  # word  # html  # go  # wordpress  # ai  # pdf  # 区别  # 排列  # count  # 循环  # 参数数组 


相关文章: 如何在新浪SAE免费搭建个人博客?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何在IIS中新建站点并解决端口绑定冲突?  javascript中对象的定义、使用以及对象和原型链操作小结  制作网站外包平台,自动化接单网站有哪些?  javascript中的try catch异常捕获机制用法分析  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  魔毅自助建站系统:模板定制与SEO优化一键生成指南  建站之星好吗?新手能否轻松上手建站?  如何通过cPanel快速搭建网站?  如何用好域名打造高点击率的自主建站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何用PHP工具快速搭建高效网站?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  建站之星如何实现五合一智能建站与营销推广?  c++怎么用jemalloc c++替换默认内存分配器【性能】  如何在IIS中新建站点并配置端口与物理路径?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  如何解决VPS建站LNMP环境配置常见问题?  如何制作算命网站,怎么注册算命网站?  兔展官网 在线制作,怎样制作微信请帖?  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何选择服务器才能高效搭建专属网站?  如何制作网站标识牌,动态网站如何制作(教程)?  C#怎么创建控制台应用 C# Console App项目创建方法  音乐网站服务器如何优化API响应速度?  linux top下的 minerd 木马清除方法  Python文件管理规范_工程实践说明【指导】  移民网站制作流程,怎么看加拿大移民官网?  建站主机SSH密钥生成步骤及常见问题解答?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  建站主机选虚拟主机还是云服务器更好?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  建站之星IIS配置教程:代码生成技巧与站点搭建指南  建站之星×万网:智能建站系统+自助建站平台一键生成  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何快速搭建虚拟主机网站?新手必看指南  如何基于云服务器快速搭建网站及云盘系统?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  高防服务器如何保障网站安全无虞?  如何快速完成中国万网建站详细流程?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  建站之星如何保障用户数据免受黑客入侵? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。