我正在从头开始创建一个管理部分。用户应该是来自具有管理员权限的wordpress站点的用户。所以我目前正在使用
对用户进行身份验证if( (!user_pass_ok($user, $pass)){
//login fail
}else{
//successful login
}
但我也想知道用户是否是管理员。我在网上看到的是他们使用current_user_can( 'administrator' )
。但在我的情况下,用户还没有登录。我必须检查用户是否是管理员,是用户输入用于登录的用户名/电子邮件地址。如何仅通过用户名/电子邮件检查此用户是否为管理员?
答案 0 :(得分:1)
$user = get_userdata( $user_id );
if ( in_array( 'administrator', (array) $user->roles ) ) {
//User has administrator privilidges
}
答案 1 :(得分:0)
正如我在评论中所指出的那样user_pass_ok( $user, $pass )
已被弃用,而不是wp_authenticate。
此外,WordPress有一个惊人的Capabilities 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())注册管理部分,并且具有类似'的功能,WordPress将在呈现WP Admin菜单时自动检查当前用户的权限manage_options'
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登录页面。