如何在自定义分类法模板内输出另一分类法的所有关联术语?
问题原因
- 未正确获取上下文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
相关产品推荐
相关产品推荐

