Удалить возможность для других пользователей просматривать администратор в списке пользователей?
-
16-10-2019 - |
Вопрос
(Примечание модератора: Оригинальный заголовок был «Удалить администратор из меню пользователя»)
Я создал роль администратора клиента, которая по сути является редактором, обладающим возможностью добавлять/удалять пользователей. Статья "Редактор может создать любого нового пользователя, кроме администратора" Был превосходно, помогая держать мою новую роль администратора клиента от редактирования или создания истинного пользователя администратора.
Однако идеальным является то, чтобы скрыть администраторов от администраторов клиентов, когда они просматривают пользователей. Я хочу, чтобы они "полагать" что они являются администратором своего сайта, но я не хочу, чтобы они могли даже просматривать мою роль/пользователя-по сути, скрывая "Администратор" роль от них, когда они находятся в "Пользователи" панель
Решение
Привет @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