How to assign capabilities to user NOT to User Role

The question:

Is there any way to assign custom capabilities to user, I’m NOT talking about User Role.

I’m running a multi author blog where I assigned user role of “Author” to all of my authors. But I need a plugin or function.php snippet that remove a capability(not the role) from USER-ID

NOTE –

I dont want to assign/revoke capabilities to role ( administrator/author etc) I want to assign/revoke them to specific user using that users ID.

UPDATE – 08/01/2012

I have blog with suppose 50 authors, A author have capabilities to do post, comment, edit, update, send emails, share etc. but when a user misuses one of this feature I want to revoke that capability/capabilities from that user.

But If I decide to using roles I’d have to create so many user roles with different capabilities such as

  • cannot send
  • cannot send & comment
  • cannot send & comment & post
    etc.

Is there a way to revoke a capability from user(not the USER-ROLE)

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

Finally, I’ve figured out a way to do it using WP_user Class.

Snippet to add/remove capability to/from specific user –

//to remove capability from user
$user = new WP_User( $user_id );
$user->remove_cap( 'can_email');

//to add capability to user
$user = new WP_User( $user_id );
$user->add_cap( 'can_email');

There is special function in capabilities.php in the wp_user class to assign/revoke capability to/from user.

Method 2

you can create a new role with required capabilities and then assign the user to it.

you can use add_role() and pass the capabilities needed.

Method 3

If what you want is to assign capabilities to already existing roles or (already created custom roled) then there is global variables called $wp_roles

//suppose you have a custom role called 'architect' and you want to add a capability called `can access architect zone`
global $wp_roles;
$wp_roles->add_cap( 'architect', 'can_access_architect_zone' );
//add to default roles
$wp_roles->add_cap( 'administrator', 'monitor_architect' );


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment