函数文档

get_user_by()

💡 云策文档标注

概述

get_user_by() 是 WordPress 核心函数,用于根据指定字段(如 ID、邮箱、登录名等)检索用户信息。它返回一个 WP_User 对象或 false,适用于开发者快速获取用户数据。

关键要点

  • 参数 $field 接受 'id'、'ID'、'slug'、'email'、'login' 作为字段类型,区分大小写。
  • 参数 $value 是对应字段的值,如用户 ID、邮箱地址或登录名。
  • 返回值:成功时返回 WP_User 对象,失败时返回 false,建议使用前检查返回值。
  • 函数内部调用 WP_User::get_data_by() 获取数据,然后初始化 WP_User 对象。
  • 从 4.4.0 版本起,'ID' 成为 'id' 的别名,增强了兼容性。

代码示例

// 通过 ID 获取用户
$author_obj = get_user_by('id', 1);

// 通过邮箱获取用户并输出姓名
$user = get_user_by('email', 'user@example.com');
if (!empty($user)) {
    echo 'User is ' . $user->first_name . ' ' . $user->last_name;
}

// 通过登录名获取用户 ID
$user = get_user_by('login', 'loginname');
if ($user) {
    echo $user->ID;
}

注意事项

  • 使用 'login' 字段时,注意其大小写敏感性可能因版本而异,建议测试确认。
  • 访问用户属性时,邮箱应使用 $user->user_email,而非 'email'。
  • 函数广泛用于用户认证、通知和 REST API 等场景,如 wp_authenticate_application_password() 和 WP_REST_Users_Controller。

📄 原文内容

Retrieves user info by a given field.

Parameters

$fieldstringrequired
The field to retrieve the user with. id | ID | slug | email | login.
$valueint|stringrequired
A value for $field. A user ID, slug, email address, or login name.

Return

WP_User|false WP_User object on success, false on failure.

Source

function get_user_by( $field, $value ) {
	$userdata = WP_User::get_data_by( $field, $value );

	if ( ! $userdata ) {
		return false;
	}

	$user = new WP_User();
	$user->init( $userdata );

	return $user;
}

Changelog

Version Description
4.4.0 Added 'ID' as an alias of 'id' for the $field parameter.
2.8.0 Introduced.

User Contributed Notes

  1. Skip to note 8 content

    Sample response of

    $author_obj = get_user_by('id', 1);

    <br />
    object(WP_User)#96 (7) {<br />
    ["data"]=><br />
    object(stdClass)#95 (10) {<br />
    ["ID"]=><br />
    string(1) "1"<br />
    ["user_login"]=><br />
    string(10) "superadmin"<br />
    ["user_pass"]=><br />
    string(34) "$P$Bx0Jgq6/Qw/o3A5fXcVKg4jxQr2PAB1"<br />
    ["user_nicename"]=><br />
    string(10) "superadmin"<br />
    ["user_email"]=><br />
    string(16) "user@example.com"<br />
    ["user_url"]=><br />
    string(0) ""<br />
    ["user_registered"]=><br />
    string(19) "2014-02-21 21:31:40"<br />
    ["user_activation_key"]=><br />
    string(0) ""<br />
    ["user_status"]=><br />
    string(1) "0"<br />
    ["display_name"]=><br />
    string(10) "superadmin"<br />
    }<br />
    ["ID"]=><br />
    int(1)<br />
    ["caps"]=><br />
    array(1) {<br />
    ["administrator"]=><br />
    bool(true)<br />
    }<br />
    ["cap_key"]=><br />
    string(25) "wp_capabilities"<br />
    ["roles"]=><br />
    array(1) {<br />
    [0]=><br />
    string(13) "administrator"<br />
    }<br />
    ["allcaps"]=><br />
    array(63) {<br />
    ["switch_themes"]=><br />
    bool(true)<br />
    ["edit_themes"]=><br />
    bool(true)<br />
    ["activate_plugins"]=><br />
    bool(true)<br />
    ["edit_plugins"]=><br />
    bool(true)<br />
    ["edit_users"]=><br />
    bool(true)<br />
    ["edit_files"]=><br />
    bool(true)<br />
    ["manage_options"]=><br />
    bool(true)<br />
    ["moderate_comments"]=><br />
    bool(true)<br />
    ["manage_categories"]=><br />
    bool(true)<br />
    ["manage_links"]=><br />
    bool(true)<br />
    ["upload_files"]=><br />
    bool(true)<br />
    ["import"]=><br />
    bool(true)<br />
    ["unfiltered_html"]=><br />
    bool(true)<br />
    ["edit_posts"]=><br />
    bool(true)<br />
    ["edit_others_posts"]=><br />
    bool(true)<br />
    ["edit_published_posts"]=><br />
    bool(true)<br />
    ["publish_posts"]=><br />
    bool(true)<br />
    ["edit_pages"]=><br />
    bool(true)<br />
    ["read"]=><br />
    bool(true)<br />
    ["level_10"]=><br />
    bool(true)<br />
    ["level_9"]=><br />
    bool(true)<br />
    ["level_8"]=><br />
    bool(true)<br />
    ["level_7"]=><br />
    bool(true)<br />
    ["level_6"]=><br />
    bool(true)<br />
    ["level_5"]=><br />
    bool(true)<br />
    ["level_4"]=><br />
    bool(true)<br />
    ["level_3"]=><br />
    bool(true)<br />
    ["level_2"]=><br />
    bool(true)<br />
    ["level_1"]=><br />
    bool(true)<br />
    ["level_0"]=><br />
    bool(true)<br />
    ["edit_others_pages"]=><br />
    bool(true)<br />
    ["edit_published_pages"]=><br />
    bool(true)<br />
    ["publish_pages"]=><br />
    bool(true)<br />
    ["delete_pages"]=><br />
    bool(true)<br />
    ["delete_others_pages"]=><br />
    bool(true)<br />
    ["delete_published_pages"]=><br />
    bool(true)<br />
    ["delete_posts"]=><br />
    bool(true)<br />
    ["delete_others_posts"]=><br />
    bool(true)<br />
    ["delete_published_posts"]=><br />
    bool(true)<br />
    ["delete_private_posts"]=><br />
    bool(true)<br />
    ["edit_private_posts"]=><br />
    bool(true)<br />
    ["read_private_posts"]=><br />
    bool(true)<br />
    ["delete_private_pages"]=><br />
    bool(true)<br />
    ["edit_private_pages"]=><br />
    bool(true)<br />
    ["read_private_pages"]=><br />
    bool(true)<br />
    ["delete_users"]=><br />
    bool(true)<br />
    ["create_users"]=><br />
    bool(true)<br />
    ["unfiltered_upload"]=><br />
    bool(true)<br />
    ["edit_dashboard"]=><br />
    bool(true)<br />
    ["update_plugins"]=><br />
    bool(true)<br />
    ["delete_plugins"]=><br />
    bool(true)<br />
    ["install_plugins"]=><br />
    bool(true)<br />
    ["update_themes"]=><br />
    bool(true)<br />
    ["install_themes"]=><br />
    bool(true)<br />
    ["update_core"]=><br />
    bool(true)<br />
    ["list_users"]=><br />
    bool(true)<br />
    ["remove_users"]=><br />
    bool(true)<br />
    ["add_users"]=><br />
    bool(true)<br />
    ["promote_users"]=><br />
    bool(true)<br />
    ["edit_theme_options"]=><br />
    bool(true)<br />
    ["delete_themes"]=><br />
    bool(true)<br />
    ["export"]=><br />
    bool(true)<br />
    ["administrator"]=><br />
    bool(true)<br />
    }<br />
    ["filter"]=><br />
    NULL<br />
    }<br />

  2. Skip to note 10 content

    I always prefer to check if the variable ($user) is empty or not before echoing any properties of the $user object:

    $user = get_user_by( ’email’, ‘user@example.com’ );

    if ( ! empty( $user ) ) {
    echo ‘User is ‘ . $user->first_name . ‘ ‘ . $user->last_name;
    }

    This is to keep things clean and prevent error messages and warnings.

  3. Skip to note 14 content

    Find user by id / email / username

     
    $new_member_id = $_POST['new_member_id'];
    $u = null;
        
    if (intval($new_member_id)) $u = get_user_by('id', $new_member_id);
    else if (strpos($new_member_id, '@') != false) $u = get_user_by('email', $new_member_id);
    else $u = get_user_by('login', $new_member_id);