Why is my Custom Post Type not showing up after adding capabilities?

I’m trying to add a custom post types with capabilities, so a custom user role can do certain things with them. Eventually the custom role is a Client, and the post a Website, and I want clients to be able to log in and view their websites. However, the post type is not showing up as soon as I add capabilities => 'website'. Why is is not showing up? I was following this tutorial and here it seems to work at 3:54 (with vehicles as a custom post type).

<?php

// Creating the website post type
function add_website_post_type() {

  $website_post_type_args = array(
    'labels' => $website_post_type_labels,
    'public' => true,
    'menu_position' => 5,
    'menu_icon' => 'dashicons-feedback',
    'hierarchical' => false,
    'supports' => array( 'title' ),
    'has_archive' => true,
    'capability_type' => 'website'
  );

  // Define all the labels
  $website_post_type_labels = array(
    'name' => __( 'Websites' ),
    'singular_name' => __( 'Website' ),
    'add_new_item' => __( 'Add New Website' ),
    'edit_item' => __( 'Edit Website' ),
    'new_item' => __( 'New Website' ),
    'view_item' => __( 'View Website' ),
    'view_items' => __( 'View Websites' ),
    'not_found' => __( 'No Websites Found' ),
    'not_found_in_trash' => __( 'No Deleted Websites Found' ),
    'all_items' => __( 'All Websites' ),
    'archives' => __( 'Website Archives' ),
    'insert_into_item' => __( 'Insert Into Website' ),
    'uploaded_to_this_item' => __( 'Uploaded To This Website' )
  );

  register_post_type( 'website', $website_post_type_args );

}

add_action( 'init', 'add_website_post_type', 10 );

// Create the client user role
function add_client_user_role() {

  $capabilities = array(
    'publish_website'        => true,
    'edit_website'           => true,
    'edit_others_website'    => true,
    'delete_website'         => true,
    'delete_others_website'  => true,
    'read_website'           => true,
    'read_private_website'   => true,
    'read'
  );

  add_role( 'client', 'Client', $capabilities );

}

add_action( 'init', 'add_client_user_role', 10 );

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You have to register custom capabilities and then apply inside the register post type function

function register_website_caps() {

    $admins = get_role( 'administrator' );

    $admins->add_cap( 'edit_website' ); 
    $admins->add_cap( 'read_website' ); 
    $admins->add_cap( 'delete_website' ); 
    $admins->add_cap( 'edit_websites' ); 
    $admins->add_cap( 'edit_others_websites' ); 
    $admins->add_cap( 'publish_websites' ); 
    $admins->add_cap( 'read_private_websites' ); 
}
add_action( 'admin_init', 'register_website_caps');


// Creating the website post type
function add_website_post_type() {

   // Custom capabilities mapping
    $capabilities = array(
        'edit_post'             => 'edit_website',
        'read_post'             => 'read_website',
        'delete_post'           => 'delete_website',
        'edit_posts'            => 'edit_websites',
        'edit_others_posts'     => 'edit_others_websites',
        'publish_posts'         => 'publish_websites',
        'read_private_posts'    => 'read_private_websites',
    );


  // Define all the labels
  $website_post_type_labels = array(
    'name' => __( 'Websites' ),
    'singular_name' => __( 'Website' ),
    'add_new_item' => __( 'Add New Website' ),
    'edit_item' => __( 'Edit Website' ),
    'new_item' => __( 'New Website' ),
    'view_item' => __( 'View Website' ),
    'view_items' => __( 'View Websites' ),
    'not_found' => __( 'No Websites Found' ),
    'not_found_in_trash' => __( 'No Deleted Websites Found' ),
    'all_items' => __( 'All Websites' ),
    'archives' => __( 'Website Archives' ),
    'insert_into_item' => __( 'Insert Into Website' ),
    'uploaded_to_this_item' => __( 'Uploaded To This Website' )
  );

  $website_post_type_args = array(
    'labels' => $website_post_type_labels,
    'public' => true,
    'menu_position' => 5,
    'menu_icon' => 'dashicons-feedback',
    'hierarchical' => false,
    'supports' => array( 'title' ),
    'has_archive' => true,
    'capabilities' => $capabilities,
    'map_meta_cap' => true //Whether to use the internal default meta capability handling.
  );


  register_post_type( 'website', $website_post_type_args );

}

add_action( 'init', 'add_website_post_type', 10 );


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

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x