
本教程将详细指导如何在wordpress中正确获取自定义文章类型的分类,即自定义分类法(custom taxonomy)的术语(terms)。不同于针对内置“分类”的`get_categories()`函数,获取自定义分类法术语需使用`get_terms()`函数,通过指定分类法名称来精确检索,确保内容展示的灵活性与准确性。
在WordPress中,内容组织主要通过分类(Categories)和标签(Tags)实现。然而,当处理自定义文章类型(Custom Post Types)时,为了提供更灵活、更贴合业务逻辑的分类方式,WordPress引入了自定义分类法(Custom Taxonomies)。
理解这一区别至关重要,因为错误的函数选择会导致无法获取到期望的数据。
要正确获取自定义文章类型所关联的自定义分类法术语,我们应该使用更通用的get_terms()函数。此函数能够检索WordPress中任何注册的分类法下的术语。
核心参数:
get_terms()函数接受一个参数数组,其中最关键的是'taxonomy'。
示例代码:获取并显示自定义分类法术语
假设您已在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'分类法下的所有术语:
<?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>';
}
?>这段代码首先定义了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->have_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->have_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' => __('« 上一页'),
'next_text' => __('下一页 »'),
));
wp_reset_postdata(); // 重置主查询,避免影响后续查询
else :
echo '<p>没有找到相关文章。</p>';
endif;
?>这段代码展示了如何使用WP_Query的tax_query参数来构建一个基于自定义分类法术语的查询。tax_query允许您指定分类法名称、查询字段(如slug、term_id)以及要匹配的术语。
正确获取和利用自定义文章类型的分类(即自定义分类法术语)是构建复杂WordPress网站的关键技能。通过掌握get_terms()函数来检索术语,并结合WP_Query的tax_query参数来筛选文章,您可以为用户提供强大且直观的内容导航体验。遵循本教程中的指导和最佳实践,将确保您的WordPress开发工作更加高效和健壮。
以上就是WordPress自定义文章类型分类(术语)获取指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号