如何按program_categories分类展示University关联的Programs自定义文章?
解决方案
核心思路是先拿到当前University关联的所有Programs,再逐个提取它们的program_categories分类,建立「分类-下属Programs」的映射关系,最后只渲染有对应关联Programs的分类组。
以下是实现代码(假设ACF关联字段名为related_programs,分类法slug为program_categories):
<?php // 获取当前University关联的Programs文章 $related_programs = get_field('related_programs'); if ($related_programs) { // 初始化分类-Programs映射数组 $category_programs = []; foreach ($related_programs as $program) { // 获取当前Program所属的program_categories分类 $categories = get_the_terms($program->ID, 'program_categories'); if ($categories && !is_wp_error($categories)) { foreach ($categories as $category) { // 将当前Program添加到对应分类的数组中 $category_programs[$category->term_id]['term'] = $category; $category_programs[$category->term_id]['programs'][] = $program; } } } // 遍历映射数组,渲染分组内容 if (!empty($category_programs)) { foreach ($category_programs as $group) { $category = $group['term']; $programs_in_category = $group['programs']; ?> <details> <summary><?php echo esc_html($category->name); ?></summary> <ul> <?php foreach ($programs_in_category as $program) { ?> <li><a href="<?php echo get_permalink($program->ID); ?>"><?php echo esc_html($program->post_title); ?></a></li> <?php } ?> </ul> </details> <?php } } else { echo '<p>暂无关联专业</p>'; } } else { echo '<p>暂无关联专业</p>'; } ?>
代码说明:
- 先通过
get_field获取ACF关联的Programs集合,避免直接查询所有分类导致的冗余内容。 - 遍历每个Program时,用
get_the_terms提取它的分类,同时将Program归类到对应分类的数组中,自动过滤掉无关联Programs的分类。 - 最后用
details/summary标签实现折叠展开的交互效果,前端可自行添加CSS样式优化显示。
内容的提问来源于stack exchange,提问作者Hendra
相关产品推荐
相关产品推荐

