从管理页面中删除菜单项并限制功能

时间:2013-09-07 作者:SixfootJames

默认情况下,我允许人们作为贡献者订阅我的网站,这允许他们执行某些操作。

然后我想做的是删除帖子、评论、联系人(ContactForm7)和工具,只留下添加新事件的选项(事件插件)。

我还想确保,即使这些按钮是隐藏的,如果人们知道如何提交,他们也无法提交这些帖子。

目前我正在阅读专业的WordPress插件开发书籍,需要了解的内容很多,因此我现在只想在我的主题功能页面中进行介绍。

根据法典,以下是我正在尝试的内容:

    add_action( \'admin_menu\', \'jh_remove_menu_pages\' );
    function jh_remove_menu_pages() {
        remove_menu_page(\'edit-comments.php\');  
        remove_menu_page(\'tools.php\');  
        remove_menu_page(\'edit.php\');   
        remove_menu_page(\'wp-contact-form-7.php\');  
    }
我已经找到了on this page to fins all the php files I need to hide 但我不确定ContactForm7文件。编辑:设法找到解决方案here to remove Contact Form 7 from Admin Menu

但根据《食品法典》,上述代码并没有删除他们直接访问屏幕(帖子、工具等)的权限,如果他们知道如何访问,仍然可以提交:“请注意,这不会阻止用户直接访问这些屏幕。删除菜单并不能取代对用户权限进行适当筛选的需要。”

如何删除除for Events和Profile之外的所有上述功能?我正在阅读法典中的remove\\u cap,但我担心如果我删除Posts功能,可能会无意中关闭发布事件?

最后,如何仅显示当时登录的用户的相关事件?

非常感谢。

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

在您的情况下,最好的解决方案是创建您自己的客户角色,并仅为他们分配您用户需要的功能。关于wordpress,从你的问题中我可以理解,你应该给他们的唯一能力是read.

这样,他们将只看到配置文件。问题从插件开始,你没有说(或者我不明白)你正在使用哪个插件,所以我无法提供更好的帮助。

考虑到很大程度上取决于插件的编码方式:如果它检查一些标准功能,例如,您在代码中发现

if ( currrent_user_can(\'edit_posts\') ) { // do stuff
这意味着要使其工作,您必须分配edit_posts 以您的角色为上限。但这是一个问题:如果您分配该功能Post将显示admin中的菜单。当然,您可以使用remove_menu_page, 但正如您在问题中所说,如果用户知道如何操作,这不会阻止他们直接访问管理屏幕。

因此,我建议您:

创建您的自定义角色,从仅分配给该角色开始read cap查看插件的文档和/或查看代码以了解使其工作所需的功能remove_menu_pageload-{$page} 操作并阻止访问自定义角色Settings -> General 并将“自定义角色”设置为新用户默认角色

$subscriber = get_role( \'subscriber\');
$plugin_caps = array(\'edit_posts\', \'cap_required_by_event_plugin\');
$all_caps = array_merge($subscriber->capabilities, $plugin_caps);
add_role(\'custom_role\', \'Custom Role\', $all_caps );
了解插件所需的功能查看插件文档。在plugins文件夹中进行多文件搜索,搜索关键字,如\'current_user_can\', \'user_can\', \'has_cap\'. 如果您有问题,请尝试在插件支持论坛上询问(如果存在),请在此处询问并用谷歌搜索。开发人员很努力!;)

3) 为您的角色添加所需的功能最简单的方法就是将所需的cap添加到$plugin_caps 在点1上定义的数组)。

4) 如果您必须添加edit_posts 限制您的角色以使事件插件正常工作。首先,删除菜单。

add_action( \'admin_menu\', \'custom_remove_menu_pages\' );

function custom_remove_menu_pages() {
  $user = wp_get_current_user();
  if ( in_array(\'custom_role\', $user->roles) ) {
    remove_menu_page(\'edit-comments.php\');  
    remove_menu_page(\'tools.php\');  
    remove_menu_page(\'edit.php\'); 
  }
}
然后阻止访问:

add_action( \'load-edit.php\', \'custom_prevent_admin_access\' );
add_action( \'load-tools.php\', \'custom_prevent_admin_access\' );
add_action( \'load-post.php\', \'custom_prevent_admin_access\' );
add_action( \'load-post-new.php\', \'custom_prevent_admin_access\' );

function custom_prevent_admin_access() {
  $user = wp_get_current_user();
  if ( in_array(\'custom_role\', $user->roles) ) {
    wp_die("Sorry, you can\'t stay here.");
    exit();
  }
}
将“自定义角色”设置为新用户默认角色

enter image description here

就这些,希望能有所帮助。

结束

相关推荐

Recommended File Permissions

嘿,伙计们,我花了很长时间试图解决这个问题。我想知道WordPress中的文件权限应该是什么样子in order to use the autoupdate feature. 到目前为止,我的wordpress安装程序一直在询问我的FTP信息,我不想使用那种升级/安装方法,我想使用纯/直接PHP。某些上下文:Web服务器和php fcgi守护程序运行为www-data:www-data</wordpress安装位于/home/blaenk/sites/domain.tld/</首先,我read