我正在从头开始创建一个管理部分。此用户应该是来自具有管理员权限的wordpress站点的用户。所以我目前正在使用
if( (!user_pass_ok($user, $pass)){
//login fail
}else{
//successful login
}
但我也想知道用户是否是管理员。我在网上看到的是他们使用current_user_can( 'administrator' )
。但就我而言,用户尚未登录。我只需要检查用户是否是管理员,就是用户输入的登录用户名/电子邮件地址。如何仅通过用户名/电子邮件检查此用户是否为管理员?
$user = get_userdata( $user_id );
if ( in_array( 'administrator', (array) $user->roles ) ) {
//User has administrator privilidges
}
正如我在评论中指出的那样user_pass_ok( $user, $pass )
已被弃用,有利于wp_authenticate。
此外,WordPress有一个惊人的功能API,远远超出了角色。 我强烈建议您阅读它。
举个简短的例子,如果我想授予用户管理 WordPress 选项的访问权限(从管理员角色继承的称为 manage_options
的功能),我所要做的就是说current_user_can('manage_options')
或使用WP_User->has_cap(...)
函数。
基于功能的匹配通常比角色匹配更灵活...例如,假设我的网站有第二个角色,称为"开发人员"。如果基于角色限制访问权限,并且希望向具有开发人员角色的用户授予对功能的访问权限,则每当需要验证用户权限时,都需要添加第二次检查:($role == 'administrator' || $role == 'developer')
因此,如果您已经登录了用户,则始终可以通过以下方式验证其功能:
current_user_can( 'manage_options' ) // all admins have 'manage_options'
或者定义您自己的自定义上限,将其提供给所有管理员:
function add_custom_admin_caps() {
$role = get_role( 'administrator' );
$role->add_cap( 'access_my_admin_zone' );
}
add_action( 'admin_init', 'add_custom_admin_caps');
并针对当前用户检查自定义上限
current_user_can( 'access_my_admin_zone' )
功能的额外好处是,如果您使用add_*_page功能之一(add_menu_page())和"manage_options"等功能注册管理部分,WordPress将在呈现WP管理菜单时自动检查当前用户的权限
add_menu_page ( $title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position)
最后,有点不清楚您是否自己登录用户,如果是这样,如果您从头开始登录用户(即不使用WordPress的登录表单),我会提出这种替代方案:
$user = wp_authenticate( $user, $pass );
if ( is_a( $user, 'WP_User' ) && $user->has_cap( 'manage_options' ) ) {
// success
} else {
// fail
}
您还需要在自定义管理员的每个页面加载期间调用current_user_can( 'manage_options' )
以验证用户是否已登录并具有权限,如果失败,则将他们定向到您的自定义登录页面...或者可能,带有 auth_redirect() 的 WordPress 登录页面。