如何将自定义角色的自定义帖子类型的“edit_published_posts”功能设置为 false?还可能吗?

问题描述 投票:0回答: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 插件页面,其中指出“edit_published_posts”功能“仅适用于“帖子”帖子类型。” https://publishpress.com/knowledge-base/edit_published_posts/

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

wordpress custom-post-type wordpress-capabilities wordpress-roles
2个回答
0
投票

我找到了解决问题的方法:

首先,我需要创建一个自定义的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);

0
投票
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 );
© www.soinside.com 2019 - 2024. All rights reserved.