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

时间:2012-06-12 作者:urok93

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

/* 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\'); 
}

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

register_post_type() 接受参数capabilities 在其论点中。看见get_post_type_capabilities() 获取可能的值。从评论中:

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

  • edit_post, read_post, 和delete_post 是元功能,通常根据上下文映射到相应的基本功能,即正在编辑/读取/删除的帖子和正在检查的用户或角色。因此,这些功能通常不会直接授予用户或角色。

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

  • edit_others_posts - 控制是否可以编辑其他用户拥有的此类型的对象。如果帖子类型不支持作者,则其行为如下edit_posts.
  • publish_posts - 控制此帖子类型的发布对象
  • read_private_posts - 控制是否可以读取私有对象
这四种基本功能在不同位置的core中进行了检查。还有其他七种基本功能在core中没有直接引用,除了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(). 因此,只有在post类型注册到\'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\'
),

结束