如何为自定义角色将自定义 post 类型的 'edit_published_posts' 功能设置为 false?有可能吗?

How to set the 'edit_published_posts' capability of a custom post type on false for a custom role ? Is it even possible?

我尝试设置一个自定义角色,它只能创建特定自定义 post 类型的 post。 此自定义角色应该只能创建 post,但不能发布它。发布将由管理员完成。 post发布后,自定义角色应该无法再次编辑post。

当尝试使用普通 posts(不是自定义 post 类型)实现上述目标时,效果很好。我可以使用:

add_role('custom_role', 'My Custom Role', array(
   'read' => true,
   'edit_posts' => true,
   'edit_published_posts' => false,
));

但是当尝试使用自定义 post 类型对上述内容进行存档时,我最终得到了 2 个结果,具体取决于权限的设置方式:

  1. 我也可以在 post 发布后创建和编辑它们,或者
  2. 首先我无法创建 post。

到目前为止我为实现这一目标所做的努力:

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-Plugin 的一个页面,其中指出 'edit_published_posts' 功能 'only applies to the “Posts” post type.' 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);