【问题标题】:Clone role capabilities for a post type帖子类型的克隆角色功能
【发布时间】:2014-09-29 17:35:30
【问题描述】:

我在我的插件中注册了一个自定义帖子类型(“播放列表”)。 我已经阅读了很多关于角色和能力的内容,但这很难完全理解...... 我想要实现的是按角色克隆帖子类型的功能: 就我而言,我想从“帖子”(按角色)中获取功能,并将它们分配给我的自定义帖子类型(“播放列表”)

我不想像下面那样使用“capability_type”,因为我不想将“发布”功能分配给我的“播放列表”帖子类型,我希望它有自己的功能但具有相同的默认值每个角色。

function register_post_type() {
    $args = array( 
        ...
        'capability_type' => 'post', //I think I don't need this
        ...
    );
    register_post_type( 'playlist', $args );
)

所以我想我需要更多类似的东西:

function register_post_type() {
    $args = array( 
        ...
        'capability_type'     => 'playlist',
        'map_meta_cap'        => true,
        'capabilities' => array(
            'edit_post'              => 'edit_playlist',
            'read_post'              => 'read_playlist',
            'delete_post'            => 'delete_playlist',
            'create_posts'           => 'create_playlists',
            'edit_posts'             => 'edit_playlists',
            'edit_others_posts'      => 'manage_playlists',
            'publish_posts'          => 'manage_playlists',
            'read_private_posts'     => 'read',
            'read'                   => 'read',
            'delete_posts'           => 'manage_playlists',
            'delete_private_posts'   => 'manage_playlists',
            'delete_published_posts' => 'manage_playlists',
            'delete_others_posts'    => 'manage_playlists',
            'edit_private_posts'     => 'edit_playlists',
            'edit_published_posts'   => 'edit_playlists'
        ),
        ...
    );
    register_post_type( 'playlist', $args );
)

但在那之后,我需要运行一个函数来根据“发布”功能将这些功能分配给每个角色。 明白我的意思了吗?

您知道我如何实现这一目标吗?

谢谢!

PS:有用的链接:http://justintadlock.com/archives/2013/09/13/register-post-type-cheat-sheet

【问题讨论】:

    标签: wordpress custom-post-type role capability


    【解决方案1】:

    这就是我最终做到的。
    这不完全是问题的答案(克隆角色),但它可以满足我的需要。

        function register_post_type() {
            ...
            'capability_type' => 'playlist',
            'map_meta_cap'        => true,
            'capabilities' => array(
    
                // meta caps (don't assign these to roles)
                'edit_post'              => 'edit_playlist',
                'read_post'              => 'read_playlist',
                'delete_post'            => 'delete_playlist',
    
                // primitive/meta caps
                'create_posts'           => 'create_playlists',
    
                // primitive caps used outside of map_meta_cap()
                'edit_posts'             => 'edit_playlists',
                'edit_others_posts'      => 'manage_playlists',
                'publish_posts'          => 'manage_playlists',
                'read_private_posts'     => 'read',
    
                // primitive caps used inside of map_meta_cap()
                'read'                   => 'read',
                'delete_posts'           => 'manage_playlists',
                'delete_private_posts'   => 'manage_playlists',
                'delete_published_posts' => 'manage_playlists',
                'delete_others_posts'    => 'manage_playlists',
                'edit_private_posts'     => 'edit_playlists',
                'edit_published_posts'   => 'edit_playlists'
                ),
            ...
            );
    
            register_post_type( $this->post_type, $args );
        }
    
        function set_roles_capabilities(){
    
            global $wp_roles;
            if ( ! isset( $wp_roles ) ) $wp_roles = new WP_Roles();
    
            //create a new role, based on the subscriber role 
            $role_name = 'playlist_author';
            $subscriber = $wp_roles->get_role('subscriber');
            $wp_roles->add_role($role_name,__('Playlist Author','xspfpl'), $subscriber->capabilities);
    
            //list of custom capabilities and which role should get it
            $wiki_caps=array(
                'manage_playlists'=>array('administrator','editor'),
                'edit_playlists'=>array('administrator','editor',$role_name),
                'create_playlists'=>array('administrator','editor',$role_name),
            );
    
            foreach ($wiki_caps as $wiki_cap=>$roles){
                foreach ($roles as $role){
                    $wp_roles->add_cap( $role, $wiki_cap );
                }
            }
    
        }
    
        register_activation_hook( __FILE__ , 'set_roles_capabilities' );//roles & capabilities
        add_action( 'init', 'register_post_type');
    

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 1970-01-01
      • 2012-01-02
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多