如何在 WordPress 中随机显示 20 名订阅用户(含头像)

发布时间 - 2026-01-29 00:00:00    点击率:

本文详解如何在 wordpress 网站中从所有订阅者中**真正随机选取 20 人**并展示其头像,解决 `get_users()` 默认不支持 `orderby => 'rand'` 的限制,提供可直接部署的两步查询方案。

在 WordPress 开发中,get_users() 函

数虽强大,但其原生参数并不支持 orderby => 'rand'(该参数仅对 WP_Query 有效,对用户查询无效)。因此,若你希望从全部订阅用户中真正随机抽取固定数量(如 20 人),而非按注册时间、用户名等顺序截取前 20 名,就必须采用分步策略:先获取所有订阅者 ID,再从中随机采样,最后按 ID 批量拉取完整用户数据。

以下是推荐的三段式实现方案,兼顾性能、可读性与兼容性(适用于 WordPress 4.0+):

✅ 步骤一:获取全部订阅者 ID 列表

使用 'fields' => 'ID' 参数极大提升查询效率——仅返回用户 ID,避免加载冗余字段(如 user_login、user_email 等),尤其当订阅者数量较大时效果显著:

 'subscriber',
    'fields' => 'ID'
);
$user_ids = get_users($args); // 返回索引数组,如 [101, 205, 337, ...]

✅ 步骤二:随机抽取 20 个 ID 并查询用户详情

利用 PHP 原生函数 array_rand() 从 $user_ids 中无放回随机选取 20 个键名,再通过 'include' 参数精准拉取对应用户数据。注意:array_rand() 返回的是键(key),需用 array_values() 提取值,或直接用于 include(因 get_users() 的 include 接受数值数组):

// 随机选取最多 20 个 ID(若订阅者不足 20 人,则返回全部)
$random_keys = array_rand($user_ids, min(20, count($user_ids)));
$random_ids  = array_values(array_intersect_key($user_ids, array_flip($random_keys)));

// 查询这 20 个用户的完整信息
$args = array(
    'include' => $random_ids,
    'orderby' => 'user_nicename',
    'order'   => 'ASC'
);
$random_users = get_users($args);
⚠️ 关键注意事项: 若订阅用户总数 少于 20 人,array_rand() 会触发警告。上述 min(20, count(...)) 可安全兜底; array_rand() 返回的是原数组的键名,而 $user_ids 是索引数组(键为 0,1,2...),因此可直接用 array_values() 转换为纯数值 ID 数组; 'include' 参数会自动忽略不存在的 ID,无需额外校验。

✅ 步骤三:渲染头像列表

最终遍历 $random_users 输出头像。建议使用 $user->ID(而非 $user->user_email)调用 get_avatar(),更可靠且支持本地头像缓存:

  • ID, 96); ?>

? 进阶优化建议

  • 缓存随机结果:对高流量站点,可将 $random_ids 存入 Transient(如 set_transient('random_subscribers', $random_ids, HOUR_IN_SECONDS)),每小时刷新一次,降低数据库压力;
  • 添加备用排序:若需视觉上更“随机”,可在最终输出前用 usort() 对 $random_users 按 rand() 二次打乱(但通常非必需);
  • 错误处理:增加 if (empty($random_users)) { echo '

    暂无订阅用户

    '; } 提升健壮性。

此方案彻底规避了 SQL 层面的 ORDER BY RAND() 性能陷阱(全表扫描),以两次轻量级查询达成高效、可控的随机展示目标,是 WordPress 用户随机化展示的最佳实践。


# php  # word  # wordpress  # ai  # sql  # echo  # if  # 数值数组  # count  # include  # 数据库 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速使用云服务器搭建个人网站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Swift中switch语句区间和元组模式匹配  Laravel如何实现事件和监听器?(Event & Listener实战)  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何基于云服务器快速搭建网站及云盘系统?  如何实现javascript表单验证_正则表达式有哪些实用技巧  清除minerd进程的简单方法  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  如何用VPS主机快速搭建个人网站?  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  无锡营销型网站制作公司,无锡网选车牌流程?  魔方云NAT建站如何实现端口转发?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  新三国志曹操传主线渭水交兵攻略  如何在阿里云通过域名搭建网站?  如何利用DOS批处理实现定时关机操作详解  python中快速进行多个字符替换的方法小结  canvas 画布在主流浏览器中的尺寸限制详细介绍  如何快速搭建高效WAP手机网站吸引移动用户?  如何正确下载安装西数主机建站助手?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  googleplay官方入口在哪里_Google Play官方商店快速入口指南  微信公众帐号开发教程之图文消息全攻略  Laravel API资源类怎么用_Laravel API Resource数据转换  jQuery 常见小例汇总  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何安全更换建站之星模板并保留数据?  微信推文制作网站有哪些,怎么做微信推文,急?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  5种Android数据存储方式汇总  Laravel如何使用.env文件管理环境变量?(最佳实践)  郑州企业网站制作公司,郑州招聘网站有哪些?  详解Android图表 MPAndroidChart折线图  米侠浏览器网页背景异常怎么办 米侠显示修复  在Oracle关闭情况下如何修改spfile的参数  如何获取PHP WAP自助建站系统源码?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何生成URL和重定向?(路由助手函数)  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Laravel如何创建自定义中间件?(Middleware代码示例)  网站制作软件免费下载安装,有哪些免费下载的软件网站?  企业网站制作这些问题要关注  Laravel怎么调用外部API_Laravel Http Client客户端使用