You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:01:13