다른 사용자가 사용자 목록에서 관리자를 볼 수있는 기능을 제거 하시겠습니까?


15

( 진행자 주 : 원본 제목은 "사용자 메뉴에서 관리자 제거")

기본적으로 사용자를 추가 / 제거 할 수있는 편집자 인 클라이언트 관리자 역할을 만들었습니다. 기사 " 편집기 관리자를 제외한 모든 사용자를 새로 만들 수는 " 편집하거나 트루 관리 사용자를 작성에서 내 새로운 클라이언트 관리 역할을 유지하는 데 우수했다.

그러나 이상적인 것은 클라이언트 관리자가 사용자를 볼 때 관리자를 숨기는 것입니다. 나는 그들이 원하는 "믿는다" 본질적으로 숨어 - 그들은 자신의 사이트의 관리자 있다고하지만 그들도 내 역할 / 사용자를 볼 수 없도록하려면 "관리자" 그들이에있을 때 그들로부터 역할을 "사용자" 패널.

답변:


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
그것은 추가 된 첫 번째 사용자 만 숨 깁니다 (거의 항상 관리자 임) ... 관리자가 1 이외의 ID를 가지고 있다면 쿼리를 적절히 변경해야합니다. 또한 모든 관리자가 아니라 1 명의 관리자 만 숨 깁니다.
EAMann

실제로 이것을 버전 3.1에서만 작동시킬 수있었습니다. 이전 버전의 동일한 코드는 트릭을 수행하지 않는 것 같습니다 (3.04 짝수).
Carlos

@EAMann-사실, 편리했습니다. 누군가가 더 필요하면 조사해 보겠습니다.
MikeSchinkel

@Carlos-v3.0.x가 필요합니까, 아니면 v3.1은 괜찮습니까?
MikeSchinkel

@ 마이크 — 와우, 네가 기꺼이 도와 줄 수 있다면 정말 좋을 것입니다. 나는 아무 소용없이 해킹하고있다. 내 목적으로 관리자 ID 1은 잘 작동합니다. 정말 감사.
Carlos

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및 대신 메타 값을 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' );

1

pre_user_query작업은 WordPress 3.1.0부터 사용자 쿼리를 변경하는 데 사용될 수 있습니다


1
wp_user_query그러나 3.6.1에서는 작동하지 않습니다 pre_user_query. 3.5.x에 대해 모른다
gwillie

1
확실해? 출처를 인용 할 수 있습니까? 이 작업 현재 트렁크에서 사용 됩니다 ( wp-includes / user.php, 549 행 참조) .
Johannes Pille
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.