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

如何在WordPress的ACF重复器字段中先显示条件行再输出剩余内容?

ACF Repeater 分阶段显示解决方案

不需要嵌套while/do-while循环,更高效的做法是先把Repeater字段的内容分成两组,再依次输出:

  1. 先筛选出「管理员可见」的行(仅当当前用户是登录管理员,且子字段show_only_to_logged_in_admins值为1时)
  2. 再输出剩下的所有普通行

具体代码实现

<?php
// 获取整个Repeater字段的所有行数据
$repeater_rows = get_field('你的_repeater字段名称');
if ($repeater_rows) {
    // 初始化两个数组,分别存管理员专属行和普通行
    $admin_rows = [];
    $regular_rows = [];

    // 遍历所有行,分组到对应数组
    foreach ($repeater_rows as $row) {
        // 判断当前用户是否是管理员,且子字段符合条件
        $is_admin_only = current_user_can('manage_options') && $row['show_only_to_logged_in_admins'] == 1;
        
        if ($is_admin_only) {
            $admin_rows[] = $row;
        } else {
            $regular_rows[] = $row;
        }
    }

    // 第一阶段:输出管理员专属行
    if (!empty($admin_rows)) {
        foreach ($admin_rows as $row) {
            // 这里写你的行内容输出逻辑,比如:
            echo '<div class="admin-only-row">';
            echo '<h3>' . esc_html($row['标题子字段']) . '</h3>';
            echo '<p>' . esc_html($row['内容子字段']) . '</p>';
            echo '</div>';
        }
    }

    // 第二阶段:输出所有普通行
    if (!empty($regular_rows)) {
        foreach ($regular_rows as $row) {
            // 这里写你的行内容输出逻辑,比如:
            echo '<div class="regular-row">';
            echo '<h3>' . esc_html($row['标题子字段']) . '</h3>';
            echo '<p>' . esc_html($row['内容子字段']) . '</p>';
            echo '</div>';
        }
    }
}
?>

代码说明

  • 先通过get_field一次性获取所有Repeater行,避免多次查询数据库
  • 用foreach遍历分组,逻辑清晰且性能更优
  • 先输出管理员专属内容,再输出普通内容,完全符合需求
  • 使用current_user_can('manage_options')判断管理员权限,比直接检查用户角色更严谨

内容的提问来源于stack exchange,提问作者user5853892

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:55:59