问题描述

(主持人的说明:原始标题为 「从用户菜单中删除管理员」)

我创建了一个客户端管理员角色,它本质上是一个能够添加/删除用户的编辑器。文章 「Editor can create any new user except administrator」 非常有助于保持我的新客户端管理员角色的编辑或创建一个真正的管理员用户。

然而,理想的情况是在客户端管理员查看用户时隐藏管理员。我想让他们到”believe” 他们是他们的网站的管理员,但我不希望他们能够甚至查看我的角色/用户 – 当他们在”Users” 面板中时,基本上隐藏”administrator” 角色。

最佳解决方案

嗨 @Carlos:

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

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

次佳解决方案

这是一个 mod 给 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
        );

    }
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。