Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅通过用户名或电子邮件检查用户是否为管理员_Php_Wordpress - Fatal编程技术网

Php 仅通过用户名或电子邮件检查用户是否为管理员

Php 仅通过用户名或电子邮件检查用户是否为管理员,php,wordpress,Php,Wordpress,我从头开始创建一个管理部分。此操作的用户应该是具有管理员权限的wordpress站点的用户。因此,我目前正在使用 if( (!user_pass_ok($user, $pass)){ //login fail }else{ //successful login } 但我也想知道用户是否是管理员。我在网上看到的是,他们使用的是当前用户\u can('administrator')。但在我的例子中,用户尚未登录。我要检查的只是用户是否是管理员,以及用户登录时输入的用户名/电子邮件地

我从头开始创建一个管理部分。此操作的用户应该是具有管理员权限的wordpress站点的用户。因此,我目前正在使用

if( (!user_pass_ok($user, $pass)){
    //login fail
}else{
    //successful login
}

但我也想知道用户是否是管理员。我在网上看到的是,他们使用的是
当前用户\u can('administrator')
。但在我的例子中,用户尚未登录。我要检查的只是用户是否是管理员,以及用户登录时输入的用户名/电子邮件地址。如何仅通过用户名/电子邮件检查此用户是否是管理员?

正如我在评论中所指出的
用户通行证\u ok($user,$pass)
被弃用而支持

$user = get_userdata( $user_id );    
if ( in_array( 'administrator', (array) $user->roles ) ) {  
    //User has administrator privilidges 
}
此外,WordPress还有一个惊人的功能,远远超出了角色的范围。我强烈建议大家仔细阅读

举个简单的例子,如果我想授予用户管理WordPress选项的权限(一个从管理员角色继承而来的名为
manage\u options
的功能),我所要做的就是说
current\u user\u can('manage\u options')
或使用
WP\u user->has\u 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' )
功能的另一个好处是,如果您使用添加页面功能()和“管理选项”等功能注册管理部分,WordPress将在呈现WP Admin菜单时自动检查当前用户的权限

add_menu_page ( $title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position)
最后,有点不清楚您是否自己登录用户,如果是的话,如果您是从头开始登录用户(即不使用WordPress的登录表单),我会提出这个替代方案:


在自定义管理员的每次页面加载期间,您还需要调用
当前用户\u can('manage\u options')
,以验证该用户是否已登录并具有权限,如果失败,则将其引导到自定义登录页面。。。或者,wordpress登录页面带有。

我猜
$user\u id
这是我从用户那里得到的值。不,这不起作用。如果你从最终用户那里获得用户名,你必须找出用户id。但是,我在哪里添加
wp\u身份验证($user,$pass)
部分?只是一个旁注:user\u pass\u ok()不受欢迎,请改为使用wp\u身份验证(注意它返回wp\u用户或wp\u错误):此代码不起作用。在检查用户是管理员还是管理员之前,它会进行身份验证和登录,而不会丢失您现在正在尝试完成的任务。。。更新的答案去更深入地使用大写。。。A) 您是否正在使用添加菜单页面构建一个附加的管理页面/部分?如果是这样的话,我希望我最近的编辑能有所帮助。或者B)您是否正在编写一个全新的WP管理员,并且只是利用了核心功能?(您使用的
user\u pass\u ok
似乎暗示了这种方法)我正在使用PHP创建一个全新的非wordpress管理站点。该网站充当使用wordpress创建的网站的数据管理部分。因此该站点的用户保存在wp_users表中。我所要做的就是允许在该表上具有管理员权限的用户登录到我的站点。没错,那么我原来的答案就差不多了。唯一的问题是,您需要在每次页面加载时添加对当前用户can('manage\u options')的调用(无法解决此问题),以确保用户a)已登录B)仍在登录C)仍在管理员i尝试组合这两个参数,您能看看这里吗:
$user = wp_authenticate( $user, $pass );

if ( is_a( $user, 'WP_User' ) && $user->has_cap( 'manage_options' ) ) {
   // success
} else {
   // fail
}