I've added a custom user type in Wordpress, the custom post type supports Authors(See below). The custom user type has all the privileges of an author except for 'publish posts', but is not on the list of possible authors to assign to the post.
What am I doing wrong?
Code:
if (!get_role('member')) {
add_role('member', 'SFUK Member', array(
'delete_posts' => true,
'edit_posts' => true,
'read' => true,
'upload_files' => true,
'edit_published_posts' => true,
'delete_published_posts' => true
));
}
and here is the custom post type :
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => true,
'menu_position' => 0,
'supports' => array('title', 'editor', 'thumbnail', 'page-attributes', 'author')
);
if (!post_type_exists('ent')) {
register_post_type('ent', $args);
remove_post_type_support('ent', 'editor');
}
Let me know if more information is needed.
in order to add author support to a custom post type you need to added 'author' to the supports array when registering the post type: 'supports' => array('title', 'editor', 'thumbnail', 'comments', 'author'), This will activate author box on the edit screen.
To do this, simply go to Users » All Users in your WordPress admin panel. Then, hover over the user profile you want to change and click the 'Edit' link. This brings you to the profile edit screen. You'll want to scroll down the page to the 'Biographical Info' section to add the author's bio.
Author: This roles enables the user to edit, delete, and publish posts. Contributor: This role enable users to edit and delete their own posts. Subscriber: This role enables the user to read content on the site.
The authors dropdown is created the following call:
wp_dropdown_users( array(
'who' => 'authors',
'name' => 'post_author_override',
'selected' => empty($post->ID) ? $user_ID : $post->post_author,
'include_selected' => true
) );
The who
argument means that only users with at least 'author' role will be listed, and the Codex page says that currently it's either 'authors' or empty (meaning all users).
There is a filter for this function but it takes the HTML as input. You could create a new query for users and then output a new HTML dropdown. This is the first way to solve your problem.
However, this function with 'who' set to 'authors' searches for users whose level is not 0 which is quite strange since user levels have been deprecated long ago. I've found a related bug report on Trac recommending that you add a 'level_1' capability to your new role to fix this. This is not a clean solution but much easier than creating a filter and all HTML from scratch.
EDIT: A third and even more simple solution just came to my mind: I've created custom roles with plugins but never noticed this problem because I was always copying capabilities from existing roles and then modifying them. This way you won't forget any capabilities and it will also fix this bug.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With