Bala
Bala

Reputation: 77

how to give only access to custom post type for a particular user

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

Answers (1)

Obmerk Kronen
Obmerk Kronen

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

Related Questions