为什么我的自定义WP角色需要EDIT_POST来编辑图像?

时间:2011-07-04 作者:Andrew

这对我以外的人来说可能是显而易见的。我想我记得我在哪里读到过,“图像”实际上是“帖子”的一种形式。

当我以“客户端”身份登录时,我有一个名为“列表”的自定义帖子类型,我有一个自定义WP角色“客户端”,我启动媒体弹出窗口,浏览到一个图像,单击“显示”打开它,然后单击“编辑图像”,我得到一个-1。也就是说,除了“-1”之外,没有其他显示。

我可以通过为我的自定义角色分配“edit\\u posts”功能来解决此问题。为什么会这样?一旦我这样做了,我就会遇到另一个问题,“客户端”用户角色现在可以访问帖子、评论和;工具,我不想要。

也许我没有用这些功能正确设置我的自定义帖子类型?如何允许“客户端”编辑图像,但不能访问帖子?

      $args = array(
    \'label\' => \'Listing\',
    \'description\' => \'\',
    \'public\' => true,
    \'show_ui\' => true,
    \'show_in_menu\' => true,
    \'show_in_nav_menus\' => true,
    \'map_meta_cap\' => true,
    \'capability_type\' => \'listing\',
    \'capabilities\' => array(
                    \'edit_post\' => \'edit_listing\',
                    \'read_post\' => \'read_listing\',
                    \'delete_post\' => \'delete_listing\',
                    \'edit_posts\' => \'edit_listings\',
                    \'edit_others_posts\' => \'edit_others_listings\',
                    \'publish_posts\' => \'publish_listings\',
                    \'read_private_posts\' => \'read_private_listings\',
                    \'delete_posts\' => \'delete_listings\',
                    \'delete_private_posts\' => \'delete_private_listings\',
                    \'delete_published_posts\' => \'delete_published_listings\',
                    \'delete_others_posts\' => \'delete_others_listings\',
                    \'edit_private_posts\' => \'edit_private_listings\',
                    \'edit_published_posts\' => \'edit_published_listings\',
                ),
    \'menu_position\' => 5, 
    \'hierarchical\' => false,
    \'has_archive\' => false, 
    \'rewrite\' => array(\'slug\' => \'listing\'), 
    \'query_var\' => true,
    \'supports\' => array(\'title\'),
    \'labels\' => $labels
  ); 

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

如果我不得不猜测的话:因为图像是附件,而附件是帖子类型。因此,为了编辑作为附件的图像,作为帖子,需要edit_post 能力。

EDIT

你没有capability 是否反转映射数组键/值?

e、 g.你有\'edit_posts\' => \'edit_listings\'. 难道不是吗\'edit_listings\' => \'edit_posts\'?

SO网友:Simon Blackbourn

我知道这个问题已经提了一年了,但我刚刚发现其实有一种方法可以做到这一点,所以将其张贴在这里,以防对其他人有用:

add_filter( \'user_has_cap\', \'my_user_has_cap\', 10, 3 );

function my_user_has_cap( $user_caps, $req_cap, $args ) {

    $post = get_post( $args[2] );

    if ( \'attachment\' != $post->post_type )
        return $user_caps;

    if ( \'delete_post\' == $args[0] ) {

        if ( $user_caps[\'delete_others_posts\'] )
            return $user_caps;

        if ( !isset( $user_caps[\'delete_others_listings\'] ) or !$user_caps[\'delete_others_listings\'] )
            return $user_caps;

        $user_caps[$req_cap[0]] = true;

    }

    if ( \'edit_post\' == $args[0] ) {

        if ( $user_caps[\'edit_others_posts\'] )
            return $user_caps;

        if ( !isset( $user_caps[\'edit_others_listings\'] ) or !$user_caps[\'edit_others_listings\'] )
            return $user_caps;

        $user_caps[$req_cap[0]] = true;

    }

    return $user_caps;

}
这主要基于this Codex article.

现在是凌晨2点04分,我仍在研究功能过滤器,所以我的代码可能可以改进。。。

结束

相关推荐

Resizing all images

我刚刚更改了博客的主题,由于页面宽度很小,它打破了布局。我之前的大多数图片(附在帖子中)的宽度都在600px左右,现在我需要按450px的比例调整它们的大小。如何一次性调整它们的大小?有这个插件吗?P、 美国:编写CSS规则是一个很好的选择,我已经做到了。但我认为调整图像大小也会减少每个页面的下载开销!