-2

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

当尝试使用普通帖子(不是自定义帖子类型)实现上述目标时,它可以正常工作。我可以使用:

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

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

  1. 我也可以在帖子发布后创建和编辑帖子或
  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-Plugin 的页面,其中指出“edit_published_posts”功能“仅适用于“帖子”帖子类型。 https://publishpress.com/knowledge-base/edit_published_posts/

在进一步研究该声明时,我无法找到该声明的任何其他来源。

4

1 回答 1

-1

I found a solution for my Problem:

First I needed to create a custom capability_type ('Custom_Post', 'Custom_Posts') and then assign the capabilities to the custom role.

So here is how the working code looks like:

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);
于 2021-10-04T11:04:00.517 回答