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