删除角色的UPLOAD_FILES功能,但允许角色管理化身图像

时间:2015-12-18 作者:jerrygarciuh

我有一个网站,有1名管理员、11名编辑和4000多名作者。我需要防止作者将媒体添加到服务器并耗尽所有存储空间。

起初我试过

function removemediabuttons()
{
    if($user->wp_user_level >= 1) {
        remove_action( \'media_buttons\', \'media_buttons\' );
        global $menu;
        unset($menu[10]);
    }
}
add_action(\'admin_head\',\'removemediabuttons\');
这确实删除了非管理员的添加媒体按钮,但管理员侧栏菜单的unset()方法没有任何效果,我假设任何了解WordPress的作者都可以简单地输入媒体库URL并使用它。

所以我用

$wp_roles->remove_cap( \'author\', \'upload_files\' );

但这(正确地)删除了作者角色的使用权限WP User Avatar 对于用户来说,不要被迫使用Gravatar,并且能够在严格的本地基础上更改他们的头像,这一点非常重要。

是否可以仅为一个模块添加\\u cap()?

UPDATE 2015-12-21根据bueltge的建议,我更改了代码以检查中的配置文件get_current_screen(). 这肯定会在概要文件中启用UI,但在上载时。php UI再次检查上传,但被拒绝。本例中的检查源自/wp admin/includes/ajax操作。php,所以不是插件本身进行上传(而且正确地说)。

global $wp_roles; 
$wp_roles->remove_cap( \'author\', \'upload_files\' );
add_action( \'current_screen\', \'allowAvatarUploads\' );

function allowAvatarUploads() {
    $currentScreen = get_current_screen();
    global $wp_roles; 
    if( $currentScreen->id === "profile" ) {
        $wp_roles->add_cap( \'author\', \'upload_files\' );
        // keep their menu consistent 
        remove_menu_page(\'upload.php\'); 
    } else {

    }
}

1 个回复
SO网友:bueltge

为您的主题创建解决方案的不同提示。

由于时间较长,WP始终使用角色名称,没有级别。始终在访问主题中使用角色名称作为检查功能。功能current_user_can() 应该对你有帮助。

要删除菜单项,请使用wp核心功能remove_menu_page( $menu_slug ); 而不是未设置的。更稳定,更受支持。

钩子admin_head 不是初始化菜单更改或移除cap的最佳挂钩。要卸下盖子,请使用init 吊钩或类似物,在装载堆的早期。对于菜单项使用admin_menu.

对于您的问题,是否可以仅为一个模块添加\\u cap()

不,该功能是全球性的。但是,如果这有帮助并且可能的话,您可以检查站点、后端的屏幕并仅在此屏幕上删除它。如果要查看包装页,请使用函数https://codex.wordpress.org/Function_Reference/get_current_screen. 您将获得一个包含大量页面信息的数组,并将其用于语句来设置功能。

在您的主题中,我认为您应该删除该功能upload_files 有了你的想法-$wp_roles->remove_cap( \'author\', \'upload_files\' );. 检查头像或个人资料页面,并为您的用户添加此功能。

相关推荐

如何解决1145行/wp-includes/capabilities.php中的通知:未定义的偏移量:0

我已经看过这个问题的以前的例子,但根据我从其他人那里看到的情况,我找不到导致这个通知的解决方案。当我添加新帖子时,这会出现在屏幕顶部。1145是:$post = get_post( $args[0] ); 我没有收到任何其他类型的错误,因此我不确定这是在我的代码中导致问题的地方。Any help on this?代码如下://show metabox in post editing page add_action(\'add_meta_boxes\', \'kk_add_metabox\