If a custom capability type is defined for a custom post type the administrator role doesn't automatically get capabilities for that capability type. I discovered this when I did a fresh install of wordpress that has only my plugin in it, so I must have some plugin that changes that behavior in my old installation.
So I propose adding to the CPT sub generator the following:
A helper class (mine has some other stuff in it too, but this is what's pertinent to this issue):
class Helper {
/**
* Adds all capabilities for a capability type to a role
*
* @param string|array $cap_type the capability type - array allows for specifying
* singular and plural, otherwise plural is constructed by adding an 's'
* to the string
* @param string $role_name the role name (default: administrator)
* @return WP_Role
*/
static function add_caps( $cap_type, $role_name = 'administrator' ) {
$role = get_role( $role_name );
if ( is_array( $cap_type ) ) {
$singular = $cap_type[0];
$plural = $cap_type[1];
} else {
$singular = $cap_type;
$plural = $cap_type . 's';
}
$role->add_cap( 'edit_' . $singular );
$role->add_cap( 'edit_' . $plural );
$role->add_cap( 'edit_other_' . $plural );
$role->add_cap( 'publish_' . $plural );
$role->add_cap( 'read_' . $singular );
$role->add_cap( 'read_private_' . $plural );
$role->add_cap( 'delete_' . $singular );
return $role;
}
}
In the generated post type class:
Define the capability type:
/**
* Capability type
*
* @var string
* @since 0.0.0
*/
const CAPABILITY_TYPE = '<custom capability_type specified>';
In the constructor - parent::__construct args array:
'capability_type' => self::CAPABILITY_TYPE,
In the hooks method:
add_action( 'admin_init', array( $this, 'add_caps' ) );
And the add_caps method:
/**
* Add capabilities for our custom capability type
*
* @since 0.0.0
* @return void
*/
public function add_caps() {
Helper::add_caps( self::CAPABILITY_TYPE );
}
I don't remember if the generator has an option for adding a custom capability_type in the args for the CPT, but if not that could be added and this code generated if a custom capability_type is selected.
This would give the user a starting point for their custom capabilities.
If a custom capability type is defined for a custom post type the administrator role doesn't automatically get capabilities for that capability type. I discovered this when I did a fresh install of wordpress that has only my plugin in it, so I must have some plugin that changes that behavior in my old installation.
So I propose adding to the CPT sub generator the following:
A helper class (mine has some other stuff in it too, but this is what's pertinent to this issue):
In the generated post type class:
Define the capability type:
In the constructor - parent::__construct args array:
In the hooks method:
And the add_caps method:
I don't remember if the generator has an option for adding a custom capability_type in the args for the CPT, but if not that could be added and this code generated if a custom capability_type is selected.
This would give the user a starting point for their custom capabilities.