WordPress中按ACF字段region分组显示club-member自定义文章
按ACF地区字段分组显示自定义文章类型成员列表
我需要展示自定义文章类型club-member的所有成员,并通过ACF动态文本字段region分组显示——每个地区仅显示一次,对应成员列在地区标题下方。当前使用get_posts的代码如下:
<?php $args = array( 'post_type' => 'club-member', // 'order' => 'DESC', 'posts_per_page' => -1, ); $club_members = get_posts( $args ); if ( $club_members ) { foreach ( $club_members as $post ) { setup_postdata( $post ); $post_title = $post->post_title; $region = get_field( 'region' ); // ACF ?> <h3><?php echo $post_title; ?></h3> <?php } wp_reset_postdata(); } ?>
期望的最终HTML结构:
<h1>Region (with associated members)</h1> <h3>Club member title</h3> <h3>Club member title</h3> <h3>Club member title</h3> <h3>Club member title</h3> <h1>Region (with associated members)</h1> <h3>Club member title</h3> <h3>Club member title</h3> <h3>Club member title</h3> <h3>Club member title</h3>
实现代码
通过先将成员按region字段分组,再遍历分组后的数组即可实现需求。修改后的代码如下:
<?php $args = array( 'post_type' => 'club-member', 'posts_per_page' => -1, 'orderby' => 'title', // 可选:按成员标题排序 'order' => 'ASC' ); $club_members = get_posts( $args ); // 初始化分组数组 $grouped_members = array(); if ( $club_members ) { foreach ( $club_members as $post ) { setup_postdata( $post ); $region = get_field( 'region' ); // 处理空地区的情况,统一归类到"未指定地区" $region = !empty($region) ? trim($region) : '未指定地区'; // 将成员添加到对应地区的分组中 if ( !isset( $grouped_members[$region] ) ) { $grouped_members[$region] = array(); } $grouped_members[$region][] = $post->post_title; } wp_reset_postdata(); // 按地区名称排序(可选) ksort( $grouped_members ); // 遍历分组数组输出 foreach ( $grouped_members as $region_name => $members ) { ?> <h1><?php echo esc_html( $region_name ); ?></h1> <?php foreach ( $members as $member_title ) : ?> <h3><?php echo esc_html( $member_title ); ?></h3> <?php endforeach; ?> <br> <!-- 可选:添加地区之间的分隔 --> <?php } } ?>
关键说明
- 分组逻辑:遍历所有成员时,将每个成员按
region字段值存入对应数组分组,确保同地区成员归为一组。 - 空值处理:对未填写
region字段的成员,统一归类到"未指定地区",避免出现空标题。 - 排序优化:用
ksort()对地区名称排序,让输出的地区列表更整齐;也可根据需求调整成员排序规则。 - 安全输出:使用
esc_html()转义输出内容,避免XSS安全风险。
内容的提问来源于stack exchange,提问作者gil hamer
相关产品推荐
相关产品推荐

