Reputation: 77
In my code i have a custom post type job.I created a role called job manager.Now i want to give permissions to add,edit ,delete a job for job manager.Only he can access job post type.hoe w to achieve this....
I tried to create job manager role by following code
function add_job_manager_role(){
add_role(
'job_manager',
'Job Manager',
array(
'read' => true,
'edit_posts' => false,
'delete_posts' => false,
'publish_posts' => false,
'upload_files' => true
)
);
}
add_action( 'admin_init', 'add_job_manager_role', 4 );
how to give permissions to job manager to add ,delete,edit custom post type job
any help greatly appreciated .Thanks in advance ....
Upvotes: 6
Views: 5136
Reputation: 15949
When you add the role you have to add the capabilities also like so :
/**
add CPT capabilites to Role
*/
add_action('admin_init','o99_add_role_caps',999);
function o99_add_role_caps() {
$role = get_role('my_role'); // ex. job_manager
$role->add_cap( 'read_my_CPT');
$role->add_cap( 'edit_my_CPT' );
$role->add_cap( 'edit_my_CPT' );
$role->add_cap( 'edit_other_my_CPT' );
$role->add_cap( 'edit_published_my_CPT' );
$role->add_cap( 'publish_my_CPT' );
$role->add_cap( 'read_private_my_CPT' );
$role->add_cap( 'delete_my_CPT' );
}
my_CPT
is of course your Custom Post Type when in creating you gave the capabilities arguments or modifying it you did something like :
function change_capabilities_of_CPT( $args, $post_type ){
// Do not filter any other post type
if ( 'my_CPT' !== $post_type ) { // my_CPT == Custom Post Type == 'job' or other
// if other post_types return original arguments
return $args;
}
// This is the important part of the capabilities
/// which you can also do on creation ( and not by filtering like in this example )
// Change the capabilities of my_CPT post_type
$args['capabilities'] = array(
'edit_post' => 'edit_my_CPT',
'edit_posts' => 'edit_my_CPT',
'edit_others_posts' => 'edit_other_my_CPT',
'publish_posts' => 'publish_my_CPT',
'read_post' => 'read_my_CPT ',
'read_private_posts' => 'read_private_my_CPT',
'delete_post' => 'delete_my_CPT'
);
// Return the new arguments
return $args;
}
Edit I
For further info :
In order to be able to control the CPT, there are several other capabilities
involved for each operation.
Just for example in order to publish_my_CPT
and in order to edit you will need the edit_my_CPT
&& edit_other_my_CPT
&& read_my_CPT
&& read_private_my_CPT
and so on. please look at capabilities in the Codex and with the code posted you can add the _my_CPT
(e.g. - _job
or whatever CPT ) to those capabilities thus allowing you to achieve he desired result.
Upvotes: 5