Удалить возможность для других пользователей просматривать администратор в списке пользователей?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/10742

Вопрос

(Примечание модератора: Оригинальный заголовок был «Удалить администратор из меню пользователя»)

Я создал роль администратора клиента, которая по сути является редактором, обладающим возможностью добавлять/удалять пользователей. Статья "Редактор может создать любого нового пользователя, кроме администратора" Был превосходно, помогая держать мою новую роль администратора клиента от редактирования или создания истинного пользователя администратора.

Однако идеальным является то, чтобы скрыть администраторов от администраторов клиентов, когда они просматривают пользователей. Я хочу, чтобы они "полагать" что они являются администратором своего сайта, но я не хочу, чтобы они могли даже просматривать мою роль/пользователя-по сути, скрывая "Администратор" роль от них, когда они находятся в "Пользователи" панель

Это было полезно?

Решение

Привет @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, который проверяет, играет ли текущий пользователь роль администратора, и если нет, он выбирает только пользователей, которые являются подписчиками.

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 с атрибуция
Не связан с wordpress.stackexchange
scroll top