如果当前用户是管理员或编辑

时间:2014-01-30 作者:andy

如何检查当前登录的用户是管理员还是编辑器?

我知道如何单独进行:

<?php if(current_user_can(\'editor\')) { ?> 
    <!-- Stuff here for editors -->
<?php } ?>

<?php if(current_user_can(\'administrator\')) { ?>
    <!-- Stuff here for administrators -->
<?php } ?>
但我如何将它们结合在一起呢?一、 例如,用户是管理员还是编辑?

5 个回复
最合适的回答,由SO网友:gmazzap 整理而成

第一个答案,与WordPress无关,因为它只是PHP:使用逻辑“OR”操作符:

<?php if( current_user_can(\'editor\') || current_user_can(\'administrator\') ) {  ?>
    // Stuff here for administrators or editors
<?php } ?>
如果要检查两个以上的角色,可以检查当前用户的角色是否在角色数组中,例如:

$user = wp_get_current_user();
$allowed_roles = array(\'editor\', \'administrator\', \'author\');
<?php if( array_intersect($allowed_roles, $user->roles ) ) {  ?>
   // Stuff here for allowed roles
<?php } ?>
然而,current_user_can 不仅可以与用户的角色名称一起使用,还可以与功能一起使用。

因此,一旦编辑器和管理员都可以编辑页面,您的生活就可以更轻松地检查这些功能:

<?php if( current_user_can(\'edit_others_pages\') ) {  ?>
    // Stuff here for user roles that can edit pages: editors and administrators
<?php } ?>
看一看here 有关功能的更多信息。

SO网友:butlerblog

第一current_user_can() 不应用于检查用户的角色-应用于检查用户是否具有特定的功能。

其次,与其关注用户的角色,不如关注功能,你不必费心去做原始问题中提出的问题(即检查用户是管理员还是编辑)。相反,如果current_user_can() 按预期使用,即检查用户的功能,not 在他们的角色中,您不需要条件检查来包含“or”(| |)测试。例如:

if ( current_user_can( \'edit_pages\' ) ) { ...

edit\\u pages是管理员和编辑器角色的功能,但不是任何较低级别的角色,如作者。这就是current_user_can() 旨在使用。

SO网友:sMyles

正如@butlerblog回复所述,you should not use current_user_can to check against a role

此通知专门添加在的PHP文档中has_cap 调用的函数current_user_can

虽然在一定程度上支持对角色代替功能进行检查,但不鼓励这种做法,因为它可能会产生不可靠的结果。

这个CORRECT 方法是让用户检查$user->roles, 像这样:

if( ! function_exists( \'current_user_has_role\' ) ){
    function current_user_has_role( $role ) {

        $user = get_userdata( get_current_user_id() );
        if( ! $user || ! $user->roles ){
            return false;
        }

        if( is_array( $role ) ){
            return array_intersect( $role, (array) $user->roles ) ? true : false;
        }

        return in_array( $role, (array) $user->roles );
    }
}
下面是我用来实现这一点的一些助手函数(因为有时我不想只需要当前用户):

if( ! function_exists( \'current_user_has_role\' ) ){
    function current_user_has_role( $role ){
        return user_has_role_by_user_id( get_current_user_id(), $role );
    }
}

if( ! function_exists( \'get_user_roles_by_user_id\' ) ){
    function get_user_roles_by_user_id( $user_id ) {
        $user = get_userdata( $user_id );
        return empty( $user ) ? array() : $user->roles;
    }
}

if( ! function_exists( \'user_has_role_by_user_id\' ) ){
    function user_has_role_by_user_id( $user_id, $role ) {

        $user_roles = get_user_roles_by_user_id( $user_id );

        if( is_array( $role ) ){
            return array_intersect( $role, $user_roles ) ? true : false;
        }

        return in_array( $role, $user_roles );
    }
}
然后你可以这样做:

current_user_has_role( \'editor\' );

current_user_has_role( array( \'editor\', \'administrator\' ) );

SO网友:Dealazer

上述解决方案问题的正确答案是通过else编程基础:

if( current_user_can(\'administrator\')) { 

<!-- only administrator will see this message -->

} else { 

        if( wp_get_current_user(\'editor\')) {

<!-- only editor but no administrator will see this message -->

?>
<style type="text/css">#perhapsDIVremovalidentifier{
display:none;
</style>
}
<?php
} else {

<!-- the user is neither editor or administrator -->

}}  
简介:找到了管理员,但如果我们按下编辑器,也会找到管理员。因此,我们只让管理员通过并识别编辑器。

请记住,您应该始终使用此代码调用上述代码,以最小化cpu代码的使用:

if(is_user_logged_in()){}

SO网友:seowmx
<?php if( current_user_can(\'editor\')) :
  echo "welcome";
elseif( current_user_can(\'member\')) :
  echo "welcome";
else :
 wp_die("<h2>To view this page you must first <a href=\'". wp_login_url(get_permalink()) ."\' title=\'Login\'>log in</a></h2>");
endif;
?>
结束

相关推荐

order users with drag'n'drop?

有很多插件可以让你通过拖放来订购页面和/或帖子。是否有与订单用户类似的内容?如果没有,是否可以为此创建一个插件(即是否有足够的过滤器、操作等)?