将自定义帖子类型限制为仅网站管理员角色


17

如何从非管理员用户的仪表板中删除此自定义帖子类型?

/* Add Websites Custom Post Type */
add_action( 'init', 'create_website_type' );
function create_website_type() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Websites' ),
                'singular_name' => __( 'Website' ),
                'add_new' => __( 'Add New Website' ),
                'add_new_item' => __( 'Add New Website' ),
                'edit' => __( 'Edit Website' ),             
                'edit_item' => __( 'Edit Website' ),                
                'new_item' => __( 'Add New Website' ),              
                'view' => __( 'View Website' ),         
                'view_item' => __( 'View Website' ),                    
                'search_items' => __( 'Search Websites' ),  
                'not_found' => __( 'No Websites Found' ),
                'not_found_in_trash' => __( 'No Websites found in Trash' ),                                         
            ),
            'description' => __('Websites to be shown in Resources section.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true        
        )
    ); 
    remove_post_type_support('website','editor'); 
}

Answers:


13

register_post_type()capabilities在其参数中接受参数。请参阅get_post_type_capabilities()以获取可能的值。从评论:

默认情况下,七个键作为功能数组的一部分被接受:

  • edit_postread_postdelete_post是元功能,然后通常根据上下文将其映射到相应的原始功能,这些功能将是正在编辑/读取/删除的帖子以及正在检查的用户或角色。因此,通常不会直接将这些功能授予用户或角色。

  • edit_posts -控制是否可以编辑此帖子类型的对象。

  • edit_others_posts-控制是否可以编辑其他用户拥有的这种类型的对象。如果帖子类型不支持作者,则其行为类似于edit_posts
  • publish_posts -控制此发布类型的发布对象。
  • read_private_posts -控制是否可以读取私有对象。

这四个原始功能在各个位置的核心中进行了检查。除之外map_meta_cap(),还有七个其他基本功能没有在核心中直接引用,该功能采用了上述三个元功能并将其转换为一个或多个基本功能,然后必须根据上下文针对用户或角色进行检查。

  • read -控制是否可以读取此发布类型的对象。
  • delete_posts -控制是否可以删除此帖子类型的对象。
  • delete_private_posts -控制是否可以删除私有对象。
  • delete_published_posts -控制是否可以删除已发布的对象。
  • delete_others_posts-控制是否可以删除其他用户拥有的对象。如果帖子类型不支持作者,则其行为类似于delete_posts
  • edit_private_posts -控制是否可以编辑私人对象。
  • edit_published_posts -控制是否可以编辑发布的对象。

这些附加功能仅在中使用map_meta_cap()。因此,只有在帖子类型注册'map_meta_cap'true(默认为false)的情况下,才默认分配它们。

在您的注册参数中添加:

'capabilities' => array(
    'edit_post'          => 'update_core',
    'read_post'          => 'update_core',
    'delete_post'        => 'update_core',
    'edit_posts'         => 'update_core',
    'edit_others_posts'  => 'update_core',
    'delete_posts'       => 'update_core',
    'publish_posts'      => 'update_core',
    'read_private_posts' => 'update_core'
),

您将如何做同样的事情,但允许管理员和编辑者访问cpt?
urok93

@drtanz提供自定义功能和filter user_has_cap。有关示例,请参见此答案
fuxia

我可以按照您建议的方式进行操作,但是要使用manage_links功能(由管理员和编辑者共享)而不是update_core吗?
urok93

@drtanz是的,但是我会使用自定义功能。链接管理器最终将被删除,然后您不知道分配的功能会如何。
fuxia

2
关于update_core的注释;只有单站点安装的管理员才具有此功能。在多站点中,只有超级管理员具有此功能。
numediaweb 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.