WP_User class用于处理用户信息,是WordPress的核心类。在WordPress插件或主题中获取用户信息时应该使用WP_User class提供的方法,不要直接访问object内容。本文列举了常用的WP_User方法和代码示例

方法、代码示例和返回结果

创建WP_User的实例

语法:

1
$users = new WP_User( $id [, $name [, $blog_id ] ] );

例如:

1
2
3
4
5
// 创建一个WP_User的实例,用户ID为22
$user = new WP_User( 22 );
 
// 创建一个WP_User的实例,用户登录名为TEST-Username
$user = new WP_User( '', 'TEST-Username' );

返回结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
WP_User Object
(
    [data] => stdClass Object
        (
            [ID] => 22
            [user_login] => TEST-Username
            [user_pass] => $P$BxHrZf4YeOB5wrt2zrUleYaIpoqd7x0
            [user_nicename] => test-username
            [user_email] => test@emaildomain.com
            [user_url] => http://www.youdomain.com
            [user_registered] => 2017-12-06 05:59:56
            [user_activation_key] =>
            [user_status] => 0
            [display_name] => 张 三
        )
 
    [ID] => 22
    [caps] => Array
        (
            [administrator] => 1
        )
 
    [cap_key] => wp_capabilities
    [roles] => Array
        (
            [0] => administrator
        )
 
    [allcaps] => Array
        (
            [switch_themes] => 1
            [edit_themes] => 1
            [activate_plugins] => 1
            [edit_plugins] => 1
            [edit_users] => 1
            [edit_files] => 1
            [manage_options] => 1
            [moderate_comments] => 1
            [manage_categories] => 1
            [manage_links] => 1
            [upload_files] => 1
            [import] => 1
            [unfiltered_html] => 1
            [edit_posts] => 1
            [edit_others_posts] => 1
            [edit_published_posts] => 1
            [publish_posts] => 1
            [edit_pages] => 1
            [read] => 1
            [level_10] => 1
            [level_9] => 1
            [level_8] => 1
            [level_7] => 1
            [level_6] => 1
            [level_5] => 1
            [level_4] => 1
            [level_3] => 1
            [level_2] => 1
            [level_1] => 1
            [level_0] => 1
            [edit_others_pages] => 1
            [edit_published_pages] => 1
            [publish_pages] => 1
            [delete_pages] => 1
            [delete_others_pages] => 1
            [delete_published_pages] => 1
            [delete_posts] => 1
            [delete_others_posts] => 1
            [delete_published_posts] => 1
            [delete_private_posts] => 1
            [edit_private_posts] => 1
            [read_private_posts] => 1
            [delete_private_pages] => 1
            [edit_private_pages] => 1
            [read_private_pages] => 1
            [delete_users] => 1
            [create_users] => 1
            [unfiltered_upload] => 1
            [edit_dashboard] => 1
            [update_plugins] => 1
            [delete_plugins] => 1
            [install_plugins] => 1
            [update_themes] => 1
            [install_themes] => 1
            [update_core] => 1
            [list_users] => 1
            [remove_users] => 1
            [promote_users] => 1
            [edit_theme_options] => 1
            [delete_themes] => 1
            [export] => 1
            [administrator] => 1
        )
 
    [filter] =>
    [site_id:WP_User:private] => 1
)

WP_User::get_data_by( string $field, string|int $value )

获取用户的主要信息,不包含权限、角色等。该方法为静态方法,通过class名称直接调用。

$field可以是:id,ID,slug,email和login。

例如:

1
$userdata = WP_User::get_data_by( 'email', 'test@emaildomain.com');

返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
stdClass Object
(
    [ID] => 22
    [user_login] => TEST-Username
    [user_pass] => $P$BxHrZf4YeOB5wrt2zrUleYaIpoqd7x0
    [user_nicename] => test-username
    [user_email] => test@emaildomain.com
    [user_url] => http://www.youdomain.com
    [user_registered] => 2017-12-06 05:59:56
    [user_activation_key] =>
    [user_status] => 0
    [display_name] => 张 三
)

WP_User::exists()

根据用户ID是否被赋值判断用户是否存在。

例如:

1
2
3
4
5
6
$user = new WP_User( 22 );
if( $user->exists() ){
    echo "ID为22的用户存在";
} else {
    echo "该用户不存在";
}

WP_User::get( string $key )

从users和usermeta表中查询用户数据

例如:

1
2
$user = new WP_User( 22 );
$user_email = $user->get( 'user_email' );

有效的参数包括但不限于:

ID – 用户id

user_login – 用户登录名称

user_pass – 用户密码

user_nicename – 可在url中安全使用的user_login,例如出现在文章作者链接中

user_email – 用户电子邮箱

user_url – 用户的站点链接

user_registered – 用户注册时间

display_name – 公开显示的名字

description – 用户介绍

wp_usermeta表中所有的meta_key都可以作为该方法的参数。

WP_User::has_prop( string $key )

查询某个用户字段是否存在

例如:

1
2
3
4
5
if ( $user->has_prop( 'my_user_key') ){
    echo 'my_user_key 存在';
} else {
    echo '不存在';
}

WP_User::to_array()

返回一个数组形式的结果

例如:

1
2
$user = new WP_User( 22 );
$user_array = $user->to_array();

打印$user_array得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
Array
(
    [ID] => 22
    [user_login] => TEST-Username
    [user_pass] => $P$BxHrZf4YeOB5wrt2zrUleYaIpoqd7x0
    [user_nicename] => test-username
    [user_email] => test@emaildomain.com
    [user_url] => http://www.youdomain.com
    [user_registered] => 2017-12-06 05:59:56
    [user_activation_key] =>
    [user_status] => 0
    [display_name] => 张 三
)

WP_User::get_role_caps()

获取用户的所有权限

例如:

1
2
$user = new WP_User( 22 );
$allcaps = $user->get_role_caps();

得到一个包含用户所有权限的数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [switch_themes] => 1
    [edit_themes] => 1
    [activate_plugins] => 1
    ...
    ...
    [level_10] => 1
    [level_9] => 1
    ...
    ...
    [delete_themes] => 1
    [export] => 1
    [administrator] => 1
)

WP_User::add_role( string $role )

WP_User::set_role( string $role )

WP_User::remove_role( string $role )

给用户增加、设置唯一角色或删除角色,set_role和add_role的区别是,set_role会执行覆盖操作,把其余角色删除,只保留set的那一个角色。

例如:

1
2
3
4
5
6
7
// 创建一个自定义角色custom_role,注意这句话只需执行一次,比如在插件启用的时候。可以使用插件代替,例如User Role Editor
add_role( 'custom_role', 'Custom Subscriber', array( 'read' => true, 'level_0' => true ) );
 
// 更改用户角色
$user->add_role( 'custom_role' );
$user->set_role( 'custom_role' );
$user->remove_role( 'custom_role' );

WP_User::add_cap( string $cap, bool $grant = true )

WP_User::remove_cap( string $cap )

WP_User::remove_all_caps()

增加一个、删除一个或删除所有用户权限。add_cap()的第二个参数为false,表示给用户增加一个权限,但用户无权使用该权限。

例如:

1
2
3
4
$user = new WP_User( 22 );
$user->add_cap( 'can_edit_posts' );
$user->remove_cap( 'can_edit_posts' );
$user->remove_all_caps( 'can_edit_posts' );

WP_User::has_cap( string $cap )

判断用户是否有某项权限

例如:

1
2
3
4
5
6
7
$user = new WP_User( 22 );
$user->add_cap( 'can_edit_posts', false );
if ( $user->has_cap( 'can_edit_posts') ){
    echo "用户有can_edit_posts权限";
} else {
    echo "没有can_edit_posts权限";
}

在增加权限时,add_cap()第二个参数设为false,所以程序运行结果是 “没有can_edit_posts权限”。

WP_User::get_site_id()

查询当前用户权限属于哪个站点,返回这个站点的ID。multisite下用户在每个子站可能有不同的权限。

如何获取多个用户

class WP_User用于操作一个用户,要获取多个用户就要借助 class WP_User_Query,或者在它基础上工作的get_users()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$args = array(
    'blog_id'      => $GLOBALS['blog_id'],
    'role'         => '',
    'role__in'     => array(),
    'role__not_in' => array(),
    'meta_key'     => '',
    'meta_value'   => '',
    'meta_compare' => '',
    'meta_query'   => array(),
    'date_query'   => array(),       
    'include'      => array(),
    'exclude'      => array(),
    'orderby'      => 'login',
    'order'        => 'ASC',
    'offset'       => '',
    'search'       => '',
    'number'       => '',
    'count_total'  => false,
    'fields'       => 'all',
    'who'          => '',
 );
get_users( $args );

具体请参考文档:

https://developer.wordpress.org/reference/functions/get_users/

https://codex.wordpress.org/Class_Reference/WP_User_Query

本文转自:https://www.solagirl.net/wordpress-wp-user-methods.html

版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。