按类别分组的HTML手风琴:合并同州重复条目问题求助
解决ACF自定义字段手风琴同州条目合并问题
核心思路是先将获取到的文章按「州」字段分组,再基于分组后的数组渲染手风琴,这样同州的内容会被合并到同一个面板中。修改后的完整代码如下:
<?php $loan_list = get_posts([ 'post_type' => [ 'nas-loanmaturity' ], 'posts_per_page' => -1, 'post_status' => 'publish', 'has_password' => false, 'order' => 'ASC', 'meta_key' => 'loan_type', 'meta_value' => $type, ]); // 初始化分组数组,按州存储对应文章 $state_groups = []; foreach ($loan_list as $loan) { $post_id = $loan->ID; $state = get_field('lm_state', $post_id); // 跳过州名为空的情况(可选) if (empty($state)) continue; // 将当前文章添加到对应州的分组中 $state_groups[$state][] = [ 'title' => $loan->post_title, 'address' => get_field('lm_address', $post_id), 'link' => get_field('lm_link', $post_id), // 其他需要的字段都可以在这里添加 ]; } ?> <ul uk-accordion="active: 0"> <?php foreach ($state_groups as $state_name => $posts) : ?> <li> <a class="uk-accordion-title"><?php echo esc_html($state_name); ?></a> <div class="uk-accordion-content"> <!-- 循环输出该州下的所有文章内容 --> <?php foreach ($posts as $post) : ?> <div class="loan-item"> <h4><?php echo esc_html($post['title']); ?></h4> <?php if ($post['address']) : ?> <p><?php echo esc_html($post['address']); ?></p> <?php endif; ?> <?php if ($post['link']) : ?> <a href="<?php echo esc_url($post['link']); ?>" target="_blank">查看详情</a> <?php endif; ?> </div> <?php endforeach; ?> </div> </li> <?php endforeach; ?> </ul>
代码说明
- 分组逻辑:通过第一个
foreach遍历原始文章列表,将每篇文章按lm_state字段归类到$state_groups数组中,数组的键是州名,值是该州下的所有文章数据。 - 渲染逻辑:第二个
foreach遍历分组后的数组,每个州生成一个手风琴面板;面板内容区域再遍历该州下的所有文章,输出具体内容。 - 安全处理:使用
esc_html()和esc_url()对输出内容进行转义,避免XSS安全问题。
原来使用in_array无效的原因是没有先构建分组结构,直接判断州名无法关联到对应的文章集合,通过先分组再渲染的方式就能解决重复州条目问题。
内容的提问来源于stack exchange,提问作者iMarkDesigns
相关产品推荐
相关产品推荐

