参数
- $user_id
-
(int)(必填) 用户ID。
- $key
-
(string)(可选) 要检索的meta key。默认情况下,返回所有键的数据。
默认值: ''
- $single
-
(bool)(可选) 是否返回单个值。如果未指定
$key
,则此参数无效。默认值: false
返回
(mixed) 如果$single
为false,则为值数组。如果$single
为true,则为meta数据字段的值。对于无效的$user_id
(非数字、零值或负值),为false。如果传递了有效但不存在的用户ID,则为空字符串。
更多信息
请注意,如果meta值存在但为空,它将返回一个空字符串(或数组),就像meta值不存在一样。这可能会导致代码中出现意外行为。当您清空用户meta时,您的代码可以尝试使用add_user_meta,而不是update_user_meta认为用户尚未创建meta。
源码
更新日志
版本 | 描述 |
---|---|
3.0.0 | 开始引入 |
使用示例
如果键不存在,函数将根据$single参数的值返回空字符串或空数组
获取所有meta数据
此示例演示将$key
参数保留为空,以便检索给定用户的所有meta数据(在本示例中为user_id = 9
):<?php $all_meta_for_user = get_user_meta( 9 ); print_r( $all_meta_for_user ); ?>
结果:
Array ( [first_name] => Array ( [0] => Tom ) [last_name] => Array ( [0] => Auger)
[nickname] => Array ( [0] => tomauger ) [description] => etc.... )注意:为了访问本例中的数据,您需要取消对每个键返回的数组的引用,如下所示:
$last_name = $all_meta_for_user['last_name'][0];
为了避免这种情况,您可能希望对
get_user_meta()
的结果运行一个简单的array_map()
,以便只获取每个结果的第一个索引(从而模拟$single
参数在提供$key
时的作用:$all_meta_for_user = array_map( function( $a ){ return $a[0]; }, get_user_meta( $user_id ) ); print_r( $all_meta_for_user );
结果:
Array ( [first_name] => Tom [last_name] => Auger [nickname] => tomauger [description] => etc.... )
此外,如果要返回特定用户的所有meta并过滤掉空值,可以对上面
array_map()
的结果运行array_filter()
:// Get all user meta data for $user_id $meta = get_user_meta( $user_id ); // Filter out empty meta data $meta = array_filter( array_map( function( $a ) { return $a[0]; }, $meta ) );
此示例返回并显示用户id 9的姓氏。
<?php $user_id = 9; $key = 'last_name'; $single = true; $user_last = get_user_meta( $user_id, $key, $single ); echo '<p>The '. $key . ' value for user id ' . $user_id . ' is: ' . $user_last . '</p>'; ?>
结果:
The last_name value for user id 9 is Franklin
要检查返回值是否为空,即不存在,可以使用以下内容:
global $current_user; get_currentuserinfo(); if ( $current_user ) { $permission = get_user_meta( $current_user->ID, 'some_meta' , true ); if ( ! empty( $permission ) ) { // do stuff } } // works for both array and single values
注意:在没有meta key的情况下执行
get_user_meta( $user_id );
时,值不会自动取消序列化。您需要maybe_unserialize()
反序列化它们。