WordPress中如何将ACF字段(Town)值去重后存入数组并展示?
解决WordPress房产页面城镇列表重复问题
我来帮你搞定这个重复显示城镇的问题!这是遍历自定义文章类型时很常见的小坑,下面是修改后的代码,能完美实现城镇名称的去重,最终只展示唯一的城镇列表:
<?php // 先初始化一个空数组,用来存已经出现过的城镇 $unique_towns = array(); // WP_Query 的查询参数保持不变 $args = array( 'post_type' => 'property', 'posts_per_page' => -1, 'meta_key' => 'property_status', 'meta_value' => 'For Sale' ); $query = new WP_Query($args); ?> <?php if( $query->have_posts() ): ?> <?php while( $query->have_posts() ): $query->the_post(); ?> <?php // 获取当前房产的城镇字段值 $town = get_field('town'); // 检查:城镇值不为空,并且还没在数组里出现过 if( !empty($town) && !in_array($town, $unique_towns) ) { // 满足条件就把城镇加入数组 $unique_towns[] = $town; } ?> <?php endwhile; ?> <!-- 现在输出去重后的城镇列表 --> <ul> <?php foreach( $unique_towns as $town ): ?> <li><?php echo esc_html($town); ?></li> <?php endforeach; ?> </ul> <?php wp_reset_postdata(); // 这里用wp_reset_postdata更合适,因为我们用的是WP_Query ?> <?php endif; ?>
关键修改点说明:
- 数组存唯一值:先创建
$unique_towns空数组,用来记录已经出现过的城镇,避免重复存储 - 循环内做判断:遍历房产时,先拿到
town值,用in_array()检查是否已经在数组里,同时排除空值(防止出现空的列表项) - 单独输出列表:等所有房产遍历完成后,再遍历去重后的数组生成最终列表,而不是边遍历边输出
- 重置函数优化:把
wp_reset_query()换成wp_reset_postdata(),前者主要针对query_posts(),后者更适配WP_Query的场景
这样改完之后,你的城镇列表就只会每个城镇显示一次啦!
内容的提问来源于stack exchange,提问作者Reece
相关产品推荐
相关产品推荐

