admin管理员组文章数量:1122832
I have a pretty specific requirement to show different text in a field label on the user profile page based on the current user's role. I can't seem to figure out how to check whether the current use is an "author".
I am looking for a function like:
is_user_in_role($user, "author");
I imagine this is pretty simple, but I have searched for too long without an answer so I thought I would post it here.
I have a pretty specific requirement to show different text in a field label on the user profile page based on the current user's role. I can't seem to figure out how to check whether the current use is an "author".
I am looking for a function like:
is_user_in_role($user, "author");
I imagine this is pretty simple, but I have searched for too long without an answer so I thought I would post it here.
Share Improve this question asked Dec 8, 2010 at 15:47 jessegavinjessegavin 3,4668 gold badges30 silver badges26 bronze badges8 Answers
Reset to default 213If you only need this for current user current_user_can()
accepts both roles and capabilities.
UPDATE: Passing a role name to current_user_can()
is no longer guaranteed to work correctly (see #22624). Instead, you may wish to check user role:
$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
//The user has the "author" role
}
I was looking for a way to get a user's role using the user's id. Here is what I came up with:
function get_user_roles_by_user_id( $user_id ) {
$user = get_userdata( $user_id );
return empty( $user ) ? array() : $user->roles;
}
Then, an is_user_in_role()
function could be implemented like so:
function is_user_in_role( $user_id, $role ) {
return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
Calling roles on User Object $user->roles
do not return all the roles. The correct way to find if the user has a role or capability is following. (This works in wp version 2.0.0 and greater.) The following function works with user id you can get the current user id by $current_user_id = get_current_user_id();
/**
* Returns true if a user_id has a given role or capability
*
* @param int $user_id
* @param string $role_or_cap Role or Capability
*
* @return boolean
*/
function my_has_role($user_id, $role_or_cap) {
$u = new \WP_User( $user_id );
//$u->roles Wrong way to do it as in the accepted answer.
$roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles
if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true )
{
return true;
}
}
if(current_user_can('administrator')){
code...
}
You can also just create a new user object:
$user = new WP_User( $user_id );
if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) {
return true;
}
Not sure what version get_user_roles_by_user_id
was removed in, but it's no longer an available function.
Here is a function that accepts a user and role for greater flexibility:
function my_has_role($user, $role) { $roles = $user->roles; return in_array($role, (array) $user->roles); } if(my_has_role($user, 'some_role')) { //do stuff }
If your site happens to be using WooCommerce, you can simply use:
wc_current_user_has_role( $role );
If not, you can just create the function yourself by copying the way WooCommerce does it (combining wc_current_user_has_role()
and wc_user_has_role()
):
/**
* Checks if the current user has a role.
*
* @param string $role The role.
* @return bool
*/
function mysite_current_user_has_role( $role ) {
/** @var null|WP_User $user */
$user = wp_get_current_user();
if ( ! is_object( $user ) ) {
$user = get_userdata( $user );
}
if ( ! $user || ! $user->exists() ) {
return false;
}
return in_array( $role, $user->roles, true );
}
This is old post but here is one universal function what working on the all WordPress versions.
if(!function_exists('is_user')):
function is_user ($role=NULL, $user_id=NULL)
{
if(empty($user_id)){
$user = wp_get_current_user();
} else {
if(is_numeric($user_id) && $user_id == (int)$user_id) {
$user = get_user_by('id', (int)$user_id);
} else if(is_string($user_id) && $email = sanitize_email($user_id)) {
$user = get_user_by('email', $email);
} else {
return false;
}
}
if(!$user) return false;
return in_array( $role, (array)$user->roles, true ) !== false;
}
endif;
With this function you can search logged in user by role or by user ID/email. Also accept user roles array.
本文标签: wp adminHow to check if a user is in a specific role
版权声明:本文标题:wp admin - How to check if a user is in a specific role? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736305266a1932529.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论