如果不是admin,请删除屏幕选项选项卡

时间:2013-05-22 00:57:43

标签: wordpress

正如标题所示,我正在寻找一种方法来删除帖子/页面编辑器屏幕中的屏幕选项选项卡。我找到了以下内容......

function remove_screen_options(){ __return_false;}
add_filter('screen_options_show_screen', 'remove_screen_options');

...但它删除了所有用户的标签。我想保留给管理员。

此致

约翰

在所有努力合作之后找到答案。谢谢。

get_currentuserinfo() ;
global $user_level;

function remove_screen_options(){ __return_false;}
if( $user_level <= 8 ) add_filter('screen_options_show_screen', 'remove_screen_options');

7 个答案:

答案 0 :(得分:2)

使用Spencer建议的方式通常是最好的方法。

我认为大多数人都会找到角色&amp;能力过于混乱。使用'current_user_can'的实际用户角色通常是您对此或任何其他类似“权限”情况的最佳选择。

通常情况下,您最终会最终添加/删除特定角色的功能,因此,如果您曾向其他人提供'manage_options'功能(例如业务所有者),您会突然将其退回屏幕选项也是如此(在旁边注释'activate_plugins'通常是安全的,因为它仅适用于具有10级访问权限的人)。您可以查看页面底部User Level Capability Table上的所有权限,以便更好地掌握所有权限。

将此插入函数php:

if( !current_user_can('administrator') ) {
  // hide screen options for everyone but the admin
add_filter('screen_options_show_screen', 'remove_screen_options_tab');
}

if( current_user_can('administrator') ) {
  // code here is shown to the admin
}

遵循此格式,您可以对其他角色执行相同的操作。您也没有更改管理员,编辑,作者,贡献者和订阅者,或您创建的任何其他角色。

答案 1 :(得分:2)

如果将以下代码段放入functions.php文件中,则屏幕选项选项卡将在除admin之外的所有用户的整个后端消失。话虽如此,修改子主题的php文件是一个很好的做法。

functions.php代码:

function remove_screen_options_tab() 
{
    return current_user_can('manage_options' );
}   
add_filter('screen_options_show_screen', 'remove_screen_options_tab');

答案 2 :(得分:1)

您只需要有条件地检查当前用户是否为管理员。如果不是,则删除屏幕选项,如下所示:

if ( !is_admin() ) {
  function remove_screen_options(){ __return_false;}
  add_filter('screen_options_show_screen', 'remove_screen_options');
}

以下是详细介绍此功能的官方Wordpress文档:http://codex.wordpress.org/Function_Reference/is_admin

答案 3 :(得分:0)

试试这个

if(!current_user_can('manage_options')) add_filter('screen_options_show_screen', 'remove_screen_options');

答案 4 :(得分:0)

您正在寻找功能current_user_can

if( current_user_can( 'manage_options' ) ) {
    // executes when user is an Administrator
}

答案 5 :(得分:0)

使用Adminimize,这是一个WordPress插件,可让您隐藏WordPress后端的“不必要”项目。

http://wordpress.org/plugins/adminimize/

答案 6 :(得分:0)

这是所有设计师宁愿远离php的CSS方法。它挂钩到admin_body_class并将user- {role}添加为正文类。

functions.php代码:

function hide_using_css_user_role( $classes ) {
global $current_user;
foreach( $current_user->roles as $role )
    $classes .= ' user-' . $role;

return trim( $classes );
 }
add_filter( 'admin_body_class', 'hide_using_css_user_role' );

使用此功能,您可以在每个用户角色的管理员端隐藏/显示任何内容。在这种情况下,只需使用:not css选择器,以确保它仅对非管理员隐藏。

function add_my_custom_user_css() {
ob_start(); ?>


<style type="text/css">
:not(.user-administrator) #screen-options-link-wrap, 
    :not(.user-administrator) #contextual-help-link-wrap  {
      display:none !important;
    }   
</style>


<?php
echo ob_get_clean();
}
add_action ( 'admin_head', 'add_my_custom_user_css', 999);

当你不知道正确的过滤器/动作来隐藏或改变wordpress中的东西时,这是一种非常黑客的做事方式,但有时可以用于临时快速修复。添加999将确保它在head标记的末尾加载。请注意,它仅使用css隐藏,因此不要将此用于任何非常重要的事情,因为代码仍然在源文件中可见。

要从源中删除它,请使用jquery。只需用以下内容替换上面的样式:

<script type="text/javascript">
jQuery(document).ready(function($)) {
$( ":not(.user-administrator) #screen-options-link-wrap" ).remove();
}
</script>

'admin_body_class'已经帮我们将页面添加到body类,所以要定位特定页面,只需检查源代码,然后在body标签中可以看到当前页面。例如,仪表板使用.index-php。只需将其附加到.user-administrator或您要定位的任何用户,您就可以为使用css和javascript的任何用户自定义管理员。