You need to enable JavaScript to run this app. 如何在自定义分类法模板内输出另一分类法的所有关联术语?
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义分类法模板内输出另一分类法的所有关联术语?

问题原因

  • 未正确获取上下文ID:如果代码放在taxonomy-apartmentlocation.php的主循环外,全局$post变量未初始化,get_the_terms只会拿到归档页下第一篇文章关联的apartmentlevel术语;如果放在自定义函数内没有声明global $post,也会导致$post->ID取值错误,仅能拿到最后一篇文章的ID。
  • 输出逻辑问题:原代码直接连续echo多个slug没有添加分隔符,所有slug会拼接成一串字符串,容易被误认为只返回了最后一个术语。
  • 需求匹配错误:如果你需要获取的是当前apartmentlocation归档页下所有文章关联的全部apartmentlevel术语,原代码单篇查术语的逻辑本身不符合需求。

适配方案

场景1:输出当前归档页下每篇文章对应的所有apartmentlevel术语

将代码放到主循环内部,用数组存储后添加分隔符输出即可:

<?php
// 自定义分类页标准主循环
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        // 此处可输出文章标题、缩略图等其他内容
        if ( $terms = get_the_terms( get_the_ID(), 'apartmentlevel' ) ) {
            $term_slugs = [];
            foreach ( $terms as $term ) {
                $term_slugs[] = $term->slug;
            }
            // 用逗号分隔输出,可自行更换分隔符
            echo implode( ', ', $term_slugs );
        }
    endwhile;
endif;
?>

场景2:输出当前apartmentlocation归档页下所有文章关联的去重apartmentlevel术语

直接批量查询当前分类下所有文章的关联术语,自动去重后输出:

<?php
// 获取当前归档页的分类术语ID
$current_loc_id = get_queried_object_id();

// 查询当前分类下的所有文章ID(提升性能)
$post_ids = get_posts([
    'post_type' => 'apartment', // 替换为你自己的自定义文章类型别名
    'posts_per_page' => -1,
    'tax_query' => [
        [
            'taxonomy' => 'apartmentlocation',
            'field' => 'term_id',
            'terms' => $current_loc_id
        ]
    ],
    'fields' => 'ids'
]);

$all_level_slugs = [];
foreach ( $post_ids as $pid ) {
    $terms = get_the_terms( $pid, 'apartmentlevel' );
    if ( $terms ) {
        foreach ( $terms as $term ) {
            // 用术语ID作为键自动去重
            $all_level_slugs[$term->term_id] = $term->slug;
        }
    }
}

// 输出所有去重后的术语slug
echo implode( ', ', $all_level_slugs );
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 03:27:03