如何在WordPress的ACF重复器字段中先显示条件行再输出剩余内容?
ACF Repeater 分阶段显示解决方案
不需要嵌套while/do-while循环,更高效的做法是先把Repeater字段的内容分成两组,再依次输出:
- 先筛选出「管理员可见」的行(仅当当前用户是登录管理员,且子字段
show_only_to_logged_in_admins值为1时) - 再输出剩下的所有普通行
具体代码实现
<?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
相关产品推荐
相关产品推荐

