如何在WordPress中获取指定分类下的不重复标签?
获取WordPress指定分类下的不重复标签
完全可以实现指定分类下不重复标签的展示,你当前的代码问题在于遍历每篇文章并输出对应标签,自然会出现重复。下面提供两种可行的改进方案:
方案一:基于原代码修改(收集标签去重)
这种方式在原有查询逻辑基础上,通过数组存储标签并自动去重:
<?php // 替换为你的分类别名 $target_category = 'Anime cartoon'; // 初始化空数组,用标签ID作为键实现去重 $unique_tags = []; // 查询目标分类下的所有文章 query_posts('category_name=' . $target_category); if (have_posts()) : while (have_posts()) : the_post(); $post_tags = get_the_tags(); if ($post_tags) { foreach ($post_tags as $tag) { $unique_tags[$tag->term_id] = $tag; } } endwhile; endif; wp_reset_query(); // 输出整理后的不重复标签 if (!empty($unique_tags)) { echo '<ul>'; foreach ($unique_tags as $tag) { echo '<li><a href="' . get_tag_link($tag->term_id) . '">' . esc_html($tag->name) . '</a></li>'; } echo '</ul>'; } ?>
- 核心逻辑:利用数组键的唯一性,用标签ID作为键存储标签对象,自动过滤重复项
- 输出时做了标签名称的转义处理,避免XSS风险
方案二:直接查询关联标签(更高效)
不需要遍历所有文章,直接通过WordPress的术语查询获取目标分类文章关联的标签,性能更优:
<?php // 替换为你的分类别名 $category_slug = 'Anime cartoon'; $category = get_category_by_slug($category_slug); if ($category) { // 获取目标分类下所有文章的ID $post_ids = get_posts([ 'category' => $category->term_id, 'fields' => 'ids', 'posts_per_page' => -1 // 不限数量,获取全部文章 ]); // 查询这些文章关联的所有标签 $tags = get_terms([ 'taxonomy' => 'post_tag', 'object_ids' => $post_ids, 'hide_empty' => false // 即使标签无关联文章也保留(可选) ]); // 输出标签列表 if (!empty($tags) && !is_wp_error($tags)) { echo '<ul>'; foreach ($tags as $tag) { echo '<li><a href="' . get_tag_link($tag->term_id) . '">' . esc_html($tag->name) . '</a></li>'; } echo '</ul>'; } } ?>
- 核心逻辑:先拿到分类下所有文章ID,再通过
get_terms直接查询这些文章绑定的标签,返回的结果本身就是去重后的集合
内容的提问来源于stack exchange,提问作者afqedart
相关产品推荐
相关产品推荐

