删除其他用户查看用户列表中管理员的能力?


15

主持人注意:原始标题为“从用户菜单中删除管理员”)

我创建了一个客户端管理员角色,该角色实质上是一个具有添加/删除用户功能的编辑器。文章编辑者可以创建除管理员以外的任何新用户在帮助防止我的新客户端管理员角色编辑或创建True管理员用户方面表现出色。

但是,理想的做法是在查看用户时将管理员与客户端管理员隔离。我希望他们“相信”他们是其网站的管理员,但我不希望他们甚至能够查看我的角色/用户- 当他们位于“用户”中时,实际上向他们隐藏了“管理员”角色面板。

Answers:


10

@Carlos,您好

尝试将以下内容添加到主题functions.php文件或.php您可能正在编写的插件内的文件中(适用于WordPress 3.1.x):

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

如果您有WordPress 3.0.x,请改用此方法(因为WordPress 'pre_user_query'直到3.1 才添加该挂钩):

add_action('pre_user_search','yoursite_pre_user_search');
function yoursite_pre_user_search($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

1
这只会隐藏第一个添加的用户(几乎总是管理员)...但是,如果管理员的ID不是1,则必须适当地更改查询。它还将仅隐藏1个管理员,而不是所有管理员。
EAMann

我实际上只能在3.1版上使用。在任何较旧版本上使用相同的代码似乎都无法解决问题(甚至是3.04)。
卡洛斯,

@EAMann-是的,我很方便。如果有人需要更多,我会调查一下。
MikeSchinkel'3

@Carlos-是否需要v3.0.x,还是可以使用v3.1?
MikeSchinkel'3

@Mike-哇,是的,如果您愿意帮助我,那就太好了。我一直在努力,但无济于事。就我而言,Admin ID 1可以正常工作。对此,我真的非常感激。
卡洛斯,

10

这是MikeSchinkel的回答的模版,它检查当前用户是否具有管理员角色,如果不是,则仅选择作为订阅者的用户。

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
    $user = wp_get_current_user();

    if ( $user->roles[0] != 'administrator' ) { 
        global $wpdb;

        $user_search->query_where = 
        str_replace('WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
                 SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
                    WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}user_level' 
                    AND {$wpdb->usermeta}.meta_value = 0)", 
            $user_search->query_where
        );

    }
}

1
仅供参考为了将来,如果你想显示非管理员(编者,作者,认购等),但仍隐藏管理员的所有用户,这不是在SQL非常精通像我这样的,任何人,你可以改变这一行:AND {$wpdb->usermeta}.meta_value = 0和而是使meta值<10像这样:AND {$wpdb->usermeta}.meta_value < 10)它将显示所有用户,并向所有用户隐藏所有管理员,无论其级别如何。
Howdy_McGee

2

用户级别已弃用,因此此方法将对照功能进行检查:

/** Hide Administrator From User List **/
function isa_pre_user_query( $user_search ) {
    if ( !current_user_can( 'administrator' ) ) { // Is Not Administrator - Remove Administrator
        global $wpdb;

        $user_search->query_where = str_replace(
            'WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
              SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
              WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
              AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%' )", 
            $user_search->query_where
        );
    }
}

add_action( 'pre_user_query', 'isa_pre_user_query' );

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.