• Resolved candell

    (@candell)


    Hi

    I have a custom post type for jobs and also three user roles who will administer this post type.

    Admin – me, should be able to see everything
    Editors – should be able to have usual editor roles but be able to do everything in the jobs CPT
    Authority – should only see the jobs section in admin, but can upload media. They should only see the posts they have added themselves

    All user roles should be able to tick the taxonomies also in order to build a full job role and facilitate the job search on the front end.

    My scripts to achieve this mostly work, however admins and editors aren’t seeing all jobs added. The count at the top of the page (All, mine, published etc) show the full figures but when clicking to them only see own posts.

    Can anyone help?

    <?php
    /**
     * Custom post type for jobs and taxonimies
     */
     
    add_action( 'init', 'create_custom_post_types' );
    function create_custom_post_types() {
    	
    
    	register_post_type( 'sc_jobs',
    		array(
    			'labels' => array(
    					'name' => 'Job',
    					'singular_name' => 'Job',
    					'add_new' => 'Add New',
    					'add_new_item' => 'Add New',
    					'edit_item' => 'Edit',
    					'new_item' => 'New',
    					'all_items' => 'All Jobs',
    					'view_item' => 'View',
    					'search_items' => 'Search',
    					'not_found' =>  'No jobs found',
    					'not_found_in_trash' => 'No jobs found in Trash',
    					'parent_item_colon' => '',
    					'menu_name' => 'Jobs'
    			),
    			'public' => true,
    			'has_archive' => true,
    			'rewrite' => array('slug' => 'job'),
    			'capability_type' => 'job',
    			'capabilities' => array(
    				'publish_posts' => 'publish_jobs',
    				'edit_posts' => 'edit_jobs',
    				'edit_others_posts' => 'edit_others_jobs',
    				'delete_posts' => 'delete_jobs',
    				'delete_others_posts' => 'delete_others_jobs',
    				'read_private_posts' => 'read_private_jobs',
    				'edit_post' => 'edit_jobs',
    				'delete_post' => 'delete_jobs',
    				'read_post' => 'read_jobs',
    				'assign_terms'  => 'edit_taxo',
    				'manage_terms' => 'manage_job_terms', //by default only admin
                    'edit_terms' => 'manage_job_terms',
                    'delete_terms' => 'delete_job_terms',
                    'assign_terms' => 'edit_job-type'  // can edit cpt-type i.e. custom role
    			),
    			'supports' => array('title', 'editor', 'thumbnail')
    		)
    	);
    	
    	register_taxonomy(
    		'job_categories',
    		array('sc_jobs'),
    		array(
    			'hierarchical' => true,
    			'label' => __( 'Job Categories' ),
    			'rewrite' => array( 'slug' => 'job-category' ),
    			'show_ui' => true,
    			'query_var' => 'job-category',
    			'capabilities' => array(
        'manage_terms' => 'manage_categories',
        'edit_terms' => 'edit_categories',
        'delete_terms' => 'delete_categories',
        'assign_terms' => 'assign_categoriess',
    )
    		)
    	);
    
    	register_taxonomy(
    		'contract_type',
    		array('sc_jobs'),
    		array(
    			'hierarchical' => true,
    			'label' => __( 'Contract type' ),
    			'rewrite' => array( 'slug' => 'job-contract-type' ),
    			'show_ui' => true,
    			'query_var' => 'job-contract-type',
    			'capabilities' => array(
        'manage_terms' => 'manage_contract',
        'edit_terms' => 'edit_contract',
        'delete_terms' => 'delete_contract',
        'assign_terms' => 'assign_contract',
    )
    		)
    	);
    
    	register_taxonomy(
    		'working_pattern',
    		array('sc_jobs'),
    		array(
    			'hierarchical' => true,
    			'label' => __( 'Working Pattern' ),
    			'rewrite' => array( 'slug' => 'job-working-pattern' ),
    			'show_ui' => true,
    			'query_var' => 'job-working-pattern',
    			'capabilities' => array(
        'manage_terms' => 'manage_pattern',
        'edit_terms' => 'edit_pattern',
        'delete_terms' => 'delete_pattern',
        'assign_terms' => 'assign_pattern',
    )
    		)
    	);
    
    	register_taxonomy(
    		'salary_band',
    		array('sc_jobs'),
    		array(
    			'hierarchical' => true,
    			'label' => __( 'Salary Band' ),
    			'rewrite' => array( 'slug' => 'salary-band' ),
    			'show_ui' => true,
    			'query_var' => 'salary-band',
    			'capabilities' => array(
        'manage_terms' => 'manage_salary',
        'edit_terms' => 'edit_salary',
        'delete_terms' => 'delete_salary',
        'assign_terms' => 'assign_salary',
    )
    		)
    	);
    	
    	register_taxonomy(
    		'the_advertiser',
    		array('sc_jobs'),
    		array(
    			'hierarchical' => true,
    			'label' => __( 'Advertiser' ),
    			'rewrite' => array( 'slug' => 'job-advertiser' ),
    			'show_ui' => true,
    			'query_var' => 'job-advertiser',
    			'capabilities' => array(
        'manage_terms' => 'manage_advertiser',
        'edit_terms' => 'edit_advertiser',
        'delete_terms' => 'delete_advertiser',
        'assign_terms' => 'assign_advertiser',
    )
    			
    		)
    	);
    	
    	
    }
    
    function add_jobs_caps() {
       
        $admins = get_role( 'authority' );
    
        $admins->add_cap( 'edit_jobs' );  
        $admins->add_cap( 'publish_jobs' ); 
        $admins->add_cap( 'read_jobs' ); 
        $admins->add_cap( 'read_private_jobs' ); 
        $admins->add_cap( 'delete_jobs' ); 
    	$admins->add_cap( 'edit_taxo' );
    	$admins->remove_cap( 'edit_others_jobs' );
    	$admins->remove_cap( 'delete_others_jobs' );
    	$admins->add_cap( 'manage_job_terms' );
    	$admins->add_cap( 'delete_job_terms' );
    	$admins->add_cap( 'edit_job-type' );
    	
    	$admins->add_cap( 'manage_categories' );
    	$admins->add_cap( 'edit_categories' );
    	$admins->add_cap( 'delete_categories' );
    	$admins->add_cap( 'assign_categoriess' );
    	$admins->add_cap( 'manage_contract' );
    	$admins->add_cap( 'edit_contract' );
    	$admins->add_cap( 'delete_contract' );
    	$admins->add_cap( 'assign_contract' );
    	$admins->add_cap( 'manage_pattern' );
    	$admins->add_cap( 'edit_pattern' );
    	$admins->add_cap( 'delete_pattern' );
    	$admins->add_cap( 'assign_pattern' );
    	$admins->add_cap( 'manage_salary' );
    	$admins->add_cap( 'edit_salary' );
    	$admins->add_cap( 'delete_salary' );
    	$admins->add_cap( 'assign_salary' );
    	$admins->add_cap( 'manage_advertiser' );
    	$admins->add_cap( 'edit_advertiser' );
    	$admins->add_cap( 'delete_advertiser' );
    	$admins->add_cap( 'assign_advertiser' );
    	
    	
    	
    	
    }
    add_action( 'admin_init', 'add_jobs_caps');
    
    function add_jobs_caps1() {
       
        $admins1 = get_role( 'administrator' );
    
        $admins1->add_cap( 'edit_jobs' );  
        $admins1->add_cap( 'publish_jobs' ); 
        $admins1->add_cap( 'read_jobs' ); 
        $admins1->add_cap( 'read_private_jobs' ); 
        $admins1->add_cap( 'delete_jobs' ); 
    	$admins1->add_cap( 'edit_others_jobs' );
    	$admins1->add_cap( 'delete_others_jobs' );
    	$admins1->add_cap( 'manage_job_terms' );
    	$admins1->add_cap( 'delete_job_terms' );
    	$admins1->add_cap( 'edit_job-type' );
    	
    	$admins1->add_cap( 'manage_categories' );
    	$admins1->add_cap( 'edit_categories' );
    	$admins1->add_cap( 'delete_categories' );
    	$admins1->add_cap( 'assign_categoriess' );
    	$admins1->add_cap( 'manage_contract' );
    	$admins1->add_cap( 'edit_contract' );
    	$admins1->add_cap( 'delete_contract' );
    	$admins1->add_cap( 'assign_contract' );
    	$admins1->add_cap( 'manage_pattern' );
    	$admins1->add_cap( 'edit_pattern' );
    	$admins1->add_cap( 'delete_pattern' );
    	$admins1->add_cap( 'assign_pattern' );
    	$admins1->add_cap( 'manage_salary' );
    	$admins1->add_cap( 'edit_salary' );
    	$admins1->add_cap( 'delete_salary' );
    	$admins1->add_cap( 'assign_salary' );
    	$admins1->add_cap( 'manage_advertiser' );
    	$admins1->add_cap( 'edit_advertiser' );
    	$admins1->add_cap( 'delete_advertiser' );
    	$admins1->add_cap( 'assign_advertiser' );
    	
    }
    add_action( 'admin_init', 'add_jobs_caps1');
    
    function add_jobs_caps2() {
       
        $admins2 = get_role( 'editor' );
    
        $admins2->add_cap( 'edit_jobs' );  
        $admins2->add_cap( 'publish_jobs' ); 
        $admins2->add_cap( 'read_jobs' ); 
        $admins2->add_cap( 'read_private_jobs' ); 
        $admins2->add_cap( 'delete_jobs' ); 
    	$admins2->add_cap( 'edit_others_jobs' );
    	$admins2->add_cap( 'delete_others_jobs' );
    	$admins2->add_cap( 'manage_job_terms' );
    	$admins2->add_cap( 'delete_job_terms' );
    	$admins2->add_cap( 'edit_job-type' );
    	
    	$admins2->add_cap( 'manage_categories' );
    	$admins2->add_cap( 'edit_categories' );
    	$admins2->add_cap( 'delete_categories' );
    	$admins2->add_cap( 'assign_categoriess' );
    	$admins2->add_cap( 'manage_contract' );
    	$admins2->add_cap( 'edit_contract' );
    	$admins2->add_cap( 'delete_contract' );
    	$admins2->add_cap( 'assign_contract' );
    	$admins2->add_cap( 'manage_pattern' );
    	$admins2->add_cap( 'edit_pattern' );
    	$admins2->add_cap( 'delete_pattern' );
    	$admins2->add_cap( 'assign_pattern' );
    	$admins2->add_cap( 'manage_salary' );
    	$admins2->add_cap( 'edit_salary' );
    	$admins2->add_cap( 'delete_salary' );
    	$admins2->add_cap( 'assign_salary' );
    	$admins2->add_cap( 'manage_advertiser' );
    	$admins2->add_cap( 'edit_advertiser' );
    	$admins2->add_cap( 'delete_advertiser' );
    	$admins2->add_cap( 'assign_advertiser' );
    	
    	
    }
    add_action( 'admin_init', 'add_jobs_caps2');
    
    		
    ?>
Viewing 7 replies - 1 through 7 (of 7 total)
  • Moderator bcworkz

    (@bcworkz)

    The regular admin and editors roles just need the CPT specific capabilities added. This can be done with WP_Role::add_cap(), or you can use one of the user role management plugins. Because the assigned capabilities are persistent, you do not need to leave the plugin activated.

    You can alter the counts through the “views_edit-posts” filter. You would of course need to make your own count queries to determine the proper counts.

    Thread Starter candell

    (@candell)

    Thanks bcworkz, do you know why admins and editor users do not see all jobs, they have the cap set

    $admins1->add_cap( ‘edit_others_jobs’ );

    Moderator bcworkz

    (@bcworkz)

    There’s a slew of different checks when the CPTs are listed, you’d want to assign all the jobs equivalents, not just edit others. Like publish, delete, read, etc. unless you have a specific reason to suppress a particular capability.

    Thread Starter candell

    (@candell)

    Hi, I’m not sure which you mean I should set.

    Thread Starter candell

    (@candell)

    Aha I’m almost there!

    A while ago I added a script to prevent the display of my jobs post type if a meta I had set for the closing date had passed.

    It is also working in admin, how do I make the below I added to my functions file only work on the front end, not admin?

    add_filter( 'pre_get_posts', 'jobs_query_for_beautiful_filters' );
    function jobs_query_for_beautiful_filters( $query ) {
    	$timecutoff = date("Ymd");
    	
    	
    	 if ( (! is_post_type_archive('sc_jobs') ) && ( ! is_tax( 'job_categories' ) ) ) {
    	
    		return;
    	};
        
    	
    	$query->set( 'post_type', 'sc_jobs' );
    	$query->set( 'orderby', 'meta_value' );
    	$query->set( 'meta_key', 'closing_date' );
    	$query->set( 'meta_compare', '>=' );
    	$query->set( 'meta_value', $timecutoff );
    	$query->set( 'order', 'ASC' );
    }

    Thanks

    Moderator bcworkz

    (@bcworkz)

    Just add || is_admin() to the if() return conditionals. You might have to wrap what’s already there in another set of parenthesis, I’m not sure on that detail. Wouldn’t hurt to do it anyway.

    Thread Starter candell

    (@candell)

    Thanks, got it

Viewing 7 replies - 1 through 7 (of 7 total)

The topic ‘Custom post type and edit_others_posts’ is closed to new replies.