問題描述

(主持人的説明:原始標題為 「從用户菜單中刪除管理員」)

我創建了一個客户端管理員角色,它本質上是一個能夠添加/刪除用户的編輯器。文章 「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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。