我尝试设置一个自定义角色,该角色只能创建特定自定义帖子类型的帖子。 此自定义角色应该只能创建帖子,而不能发布它。发布将由管理员完成。 帖子发布后,自定义角色应该无法再次编辑帖子。
当尝试使用普通帖子(不是自定义帖子类型)实现上述目标时,效果很好。我可以使用:
add_role('custom_role', 'My Custom Role', array(
'read' => true,
'edit_posts' => true,
'edit_published_posts' => false,
));
但是当尝试使用自定义帖子类型存档上述内容时,我最终得到 2 个结果,具体取决于权限的设置方式:
到目前为止我为实现这一目标所做的尝试:
function my_custom_post_type(){
$args = array(
'labels' => array(
'name' => 'my_custom_post_type',
),
'hierarchical' => false,
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-images-alt2',
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields', 'author'),
'capabilities' => array(
'read_posts' => 'read_my_custom_post_type',
'edit_posts' => 'edit_my_custom_post_type',
'publish_posts' => 'publish_my_custom_post_type',
));
register_post_type('my_custom_post_type', $args);
}
add_action('init', 'my_custom_post_type');
#################
add_role('custom_role', 'custom_role');
#################
function add_role_caps()
{
$role = get_role('custom_role');
$role->add_cap('read_my_custom_post_type', true);
$role->add_cap('edit_my_custom_post_type', true);
$role->add_cap('publish_my_custom_post_type', false);
}
add_action('admin_init', 'add_role_caps', 999);
我还发现了一个 WP 插件页面,其中指出“edit_published_posts”功能“仅适用于“帖子”帖子类型。” https://publishpress.com/knowledge-base/edit_published_posts/
在进一步研究此声明时,我无法找到此声明的任何其他来源。
我找到了解决问题的方法:
首先,我需要创建一个自定义的capability_type('Custom_Post','Custom_Posts'),然后将功能分配给自定义角色。
工作代码如下:
function my_custom_post_type()
{
$args = array(
'labels' => array(
'name' => 'my_custom_post_type',
),
'hierarchical' => false,
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-images-alt2',
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields', 'author'),
'capability_type' => array('Custom_Post', 'Custom_Posts'),
'map_meta_cap' => true,
);
register_post_type('my_custom_post_type', $args);
}
add_action('init', 'my_custom_post_type');
#################
add_role('custom_role', 'custom_role');
#################
function add_role_caps()
{
$role = get_role('custom_role');
$role->add_cap('read_Custom_Post', true);
$role->add_cap('edit_Custom_Post', true);
$role->add_cap('publish_Custom_Posts', false);
$role->add_cap('edit_published_Custom_Posts', false);
}
add_action('admin_init', 'add_role_caps', 999);
function add_custom_caps() {
$roles = get_role('land_editor');
foreach($roles as $the_role) {
$role = get_role($the_role);
$role->add_cap( 'read' );
$role->add_cap( 'read_tract');
$role->add_cap( 'read_private_tract' );
$role->add_cap( 'edit_tract' );
$role->add_cap( 'edit_others_tract' );
$role->add_cap( 'edit_published_tract' );
$role->add_cap( 'publish_tract' );
$role->add_cap( 'delete_others_tract' );
$role->add_cap( 'delete_private_tract' );
$role->add_cap( 'delete_published_tract' );
$role->add_cap( 'edit_published_posts' );
$role->add_cap( 'published_posts' );
}
}
add_action('admin_init', 'add_custom_caps', 5 );