WordPress中get_users()传all_with_meta参数无法获取用户元数据问题
问题根因
你遇到的是WordPress get_users() 方法常见的理解误区:fields 参数传入all_with_meta的作用是返回完整的WP_User实例对象,而非将所有用户元数据预加载到对象的data公开属性中展示。你打印WP_User对象时看不到元数据,不代表无法读取元数据,只是默认不会在data节点下展示而已。
可选解决方案
- 方案1:指定所需字段手动赋值(你当前在用的方案)
该方案适合明确知道需要哪些元字段的场景,性能最优,不会查询冗余数据,你的实现是完全可行的:foreach ($users as $key => $wp_user_object) { $wp_user_object->data->num_colegiado = $wp_user_object->get('num_colegiado'); $wp_user_object->data->first_name = $wp_user_object->get('first_name'); $wp_user_object->data->last_name = $wp_user_object->get('last_name'); $wp_user_object->data->telefono = $wp_user_object->get('telefono'); $wp_user_object->data->nif = $wp_user_object->get('nif'); } - 方案2:批量拉取全部元数据自动赋值
如果你需要一次性获取该用户全部元数据,不需要逐个指定字段,可以调用get_user_meta()不传第二个参数直接获取所有元数据,批量写入对象:foreach ($users as $wp_user_object) { // 不传元字段名时返回该用户所有元数据的键值对数组 $user_all_meta = get_user_meta($wp_user_object->ID); foreach ($user_all_meta as $meta_key => $meta_val) { // WordPress默认返回单值元数据也会包裹一层数组,这里做兼容处理 $wp_user_object->data->{$meta_key} = count($meta_val) === 1 ? $meta_val[0] : $meta_val; } }
补充说明
如果查询的用户数量较大,优先使用方案1,只拉取需要的元字段可以有效降低数据库查询压力,避免冗余数据开销。
内容的提问来源于stack exchange,提问作者Carlos Crespo Moreno
相关产品推荐
相关产品推荐

