将权能添加到作者角色以能够删除附件

时间:2014-01-06 作者:gurung

我需要我的作者有权删除他们上传的任何附件,以防他们犯了一些错误。当前,如果作者单击媒体库中的任何缩略图,他将获得edit_image 链接,但不是delete_permanently 链接(对于更高的角色显示)。所以现在,作者可以编辑文本内容和图像,但不能删除图像附件。

我看了一下wordpress codexroles and capabilities 并发现没有所谓的delete\\u附件。那么这有可能吗,我错过了什么?我正在尝试使用一些代码,就像这里为add_cap 滤器

示例代码:

function add_author_caps() {
        $role = get_role( \'author\' );

        $role->add_cap( \'delete_attachments\' ); //of course this wont work 
    }
add_action( \'admin_init\', \'add_author_caps\');
我怎样才能让这样的东西发挥作用呢。同样,基本上我只是在寻找一种方法,让我的网站作者能够删除他们上传的附件。

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

似乎您必须自己添加该功能。您可以在How do I create a custom role capability?.

您还可以使用Members Plugin 这似乎对你有帮助(我自己还没有用过)。我想this 这里的讨论也将帮助您找到正确的方向。

EDIT: 我以前从未真正与作者合作过。我试着看看他们能做些什么,令人惊讶的是他们能删除自己上传的媒体。所以,您的安装一定有问题。也许一些插件已经删除了它们的功能。

然后,我检查了wordpress开发安装程序的作者拥有的所有功能。我的作者角色具有以下功能

上载\\u文件

编辑帖子

  • 编辑发布的帖子

    发布帖子

    阅读

    第2级

    第1级

    0级

  • 删除帖子

  • 删除发布的帖子

    我使用以下代码检查功能。

    $role = get_role(\'author\');
    foreach( $role->capabilities as $name => $val ){
        echo $name . "<br />";
    }
    
    你应该检查你的作者有哪些能力。您可以将其与capabilities of author. 然后,您可以使用发布的代码添加缺少的功能。

  • SO网友:Laura Perenon

    以下是如何仅允许编辑和删除自定义角色所拥有的附件。

    将“manage\\u other\\u users\\u attachments”和“manage\\u own\\u attachments”功能添加到管理员角色,并将“manage\\u own\\u attachments”功能添加到自定义角色。

    然后将其添加到map\\u meta\\u cap过滤器:

    if ( \'edit_post\' == $requested_action || \'delete_post\' == $requested_action ) {
        $post = get_post( $args[0] );
        $post_type = $post->post_type ;
    
        if ( \'attachment\' == $post_type ){
    
            $required_caps = array();            
            $post_author_id = $post -> post_author;
    
            if( $user_id == $post_author_id ) {
                $required_caps[] = \'manage_own_attachments\';     
            } else {                
                $required_caps[] = \'manage_other_users_attachments\';
            }
        }
    }
    
    隐藏自定义角色不拥有的附件也是一个好主意(此代码借用自WPB网站):

    add_filter( \'ajax_query_attachments_args\', \'wpb_show_current_user_attachments\' );
    
     function wpb_show_current_user_attachments( $query ) {
        $user_id = get_current_user_id();
        if ( $user_id && !current_user_can(\'manage_other_users_attachments\') && current_user_can(\'manage_own_attachments\') ) {
            $query[\'author\'] = $user_id;
        }
        return $query;
    } 
    
    我花了一段时间研究这个问题,所以我想我可以省去其他开发人员的麻烦。

    劳拉

    SO网友:rjb

    您可以允许WordPress中的作者角色(或任何自定义角色)使用以下代码段删除媒体库项目:

    /**
     * Add Capability to Author Role to Delete Media Attachments
     */
    add_action( \'admin_init\', function() {
        $author = get_role( \'author\' );
    
        if ( ! $author->has_cap( \'delete_posts\' ) ) {
            $author->add_cap( \'delete_posts\' );
        }
    });
    
    Thecapability 编辑/删除WordPress媒体库中的附件项目edit_postsdelete_post 如所示WP_Media_List_Table::_get_row_actions():

    然而,WordPress分享edit_postsdelete_posts 岗位能力and 媒体正在授予管理两者的能力,即使只打算管理其中一个。

    例如,如果您想让作者删除和编辑媒体,他们将选择访问帖子和评论管理菜单,这可能并不可取。

    一种方法是通过以下方式巧妙地隐藏这些管理菜单链接:

    /**
     * Remove Posts Admin Menu for Author Role
     */
    add_action( \'admin_init\', function () {
        $user = wp_get_current_user();
    
        if ( ! empty( $user->roles ) ) {
            if ( in_array( \'author\', $user->roles ) ) {
                remove_menu_page( \'edit.php\' );
                remove_menu_page( \'edit-comments.php\' );
            }
        }
    });
    
    请记住,这不会取消他们对帖子或评论屏幕的访问权限,他们只是看不到仪表板中的管理菜单。

    当然,应该使用更健壮的方法来控制它们的访问,但这样做的目的是在添加edit_postsdelete_posts 到WordPress中的用户角色

    结束

    相关推荐

    未在循环外工作的_Author()

    索引中有以下代码。php和我希望包含这行代码(下面的代码)以在循环顶部显示作者信息。 <?php include \'author-top.php\'; ?><!--author--> 我希望它显示在标题后面,如下所示<?php get_header(); ?> <!--This is where I want my author div to display--> <?php include \'author-top.php