You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:31:01