
本文介绍一种简洁高效的方式,替代重复的 `if` 判断代码,利用 `foreach` 遍历用户角色配置数组,统一获取各角色用户显示名称,显著减少冗余行数并提升可维护性。
在 WordPress AJAX 开发中,常见需求是根据后台插件设置(如 show_users 选项)动态展示指定角色的用户列表。原始写法往往为每个角色(如 administrator、editor、author)单独编写一段几乎相同的逻辑,导致代码臃肿、难以扩展和维护。
问题核心在于:函数内部无法直接访问外部变量 $user_roles 和 $result,且 $count 未声明为全局或引用传递,导致作用域错误与变量未定义。 因此,直接封装成函数(如 save_time())却未传参或返回值,自然无法正常工作。
✅ 推荐解决方案:直接遍历配置数组,消除重复逻辑
$user_roles = get_option('show_users');
$result = []; // 显式初始化结果数组(避免未定义警告)
$count = 0;
// 一行核心逻辑:遍历所有启用的角色
foreach ($user_roles as $role => $is_enabled) {
if ($is_enabled) { // 仅处理开启的角色
$users = get_users([
'role' => $role,
'fields' => ['ID', 'display_name'] // 按需精简字段,提升性能
]);
foreach ($users as $user) {
$result[] = $user->display_name; // 使用 [] 自动追加,比 $result[$count++] 更安全简洁
}
}
}
// 最终输出 JSON 响应(典型 AJAX 返回)
wp_send_json($result);
? 关键优化说明:
- 无需函数封装:因逻辑高度一致且依赖同一上下文,foreach 直接遍历比函数调用更轻量、更清晰;
- 显式初始化变量:$result = [] 避免 PHP 未定义索引警告;
- 按需加载字段:添加 ‘fields’ => […] 参数限制数据库查询字段,减少内存占用;
- 安全判断开关:if ($is_enabled) 确保只处理配置中启用的角色;
- 使用 $result[] 替代手动计数:更符合 PHP 惯例,避免 $count 作用域/重置问题。
? 进阶提示:若未来需支持多角色组合(如 ‘subscriber,contributor’),可进一步扩展为 get_users([‘role__in’ => explode(‘,’, $role)]);若需结构化返回(如按角色分组),可改用 $result[$role][] = $user->display_name。
总之,善用 PHP 原生数组遍历能力,配合 WordPress 查询参数优化,即可在不引入额外函数或全局变量的前提下,写出简洁、健壮、易扩展的 AJAX 用户数据获取逻辑。
