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

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

但是,理想的方法是在查看用户时向客户管理员隐藏管理员。我要他们 “相信” 他们是他们网站的管理员,但我不希望他们甚至能够查看我的角色/用户 - 完全隐藏了 “行政人员” 当他们在他们身上的角色 “用户” 控制板。

有帮助吗?

解决方案

你好 @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);
  }
}

其他提示

这是Mikeschinkel答案的mod,该mod检查当前用户是否扮演管理员的角色,如果不是,则仅选择订户用户。

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
        );

    }
}

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

/** 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' );

pre_user_query 操作可用于更改用户查询 由于WordPress 3.1.0

许可以下: CC-BY-SA归因
scroll top