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

WordPress如何按标签展示自定义文章类型文章并隐藏空标签

问题根因

你现在的写法有两个核心错误:

  • get_tags() 本身不接受你传入的文章查询参数,你定义的$args是用来查询自定义文章类型的,对标签查询完全不生效,所以会拿到全站所有post_tag标签,包括没有关联目标文章的Tag 3
  • 你先输出了标签标题才判断有没有关联文章,自然会把空标签的标题也渲染出来
修复方案

不需要改动整体逻辑,仅调整判断顺序,空标签直接跳过不渲染即可,修复后的完整代码如下:

// 这三个变量根据页面slug动态变化
$cpt = 'houses'; // 注意字符串要加引号,原写法属于语法错误
$tax = 'type';
$term = 'small';

$args = array(
    'posts_per_page'    => -1,
    'orderby'           => 'name',
    'order'             => 'ASC',
    'post_type'         => $cpt,
    'tax_query'         => array(
        array(
            'taxonomy'      => $tax,
            'field'         => 'name',
            'terms'         => $term
        )
    )
);

$tags = get_tags(); // 不需要传入无效的$args
$posts = get_posts($args);

foreach($tags as $tag) {
    // 先统计当前标签下匹配的文章
    $tag_posts = [];
    foreach($posts as $post) {
        if(has_tag($tag, $post)) { // 明确传$post参数,避免默认调用全局post导致判断错误
            $tag_posts[] = $post;
        }
    }
    // 没有匹配文章直接跳过,不渲染标签和后续内容
    if(empty($tag_posts)) continue;
?>
    <h5><?php echo $tag->name.' (Tag)'; ?></h5>
    <?php foreach($tag_posts as $p) { 
        setup_postdata($p); // 初始化post数据,保证the_permalink/the_title等模板标签输出正确
    ?>
        <a href="<?php echo get_the_permalink($p); ?>"><?php echo get_the_title($p).' (Post)'; ?></a><br>
    <?php } 
    wp_reset_postdata(); // 重置post数据,避免污染后续查询
    ?>
    <hr>
<?php
}
?>
额外优化说明

如果你的标签不是WordPress默认的post_tag,而是自定义分类法,只需要把get_tags()替换为get_terms('你的自定义标签分类法别名')即可。

内容的提问来源于stack exchange,提问作者juunichiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:42:03