(主持人注意:原始标题为“从用户菜单中删除管理员”)
我创建了一个客户端管理员角色,该角色实质上是一个具有添加/删除用户功能的编辑器。文章“ 编辑者可以创建除管理员以外的任何新用户 ”在帮助防止我的新客户端管理员角色编辑或创建True管理员用户方面表现出色。
但是,理想的做法是在查看用户时将管理员与客户端管理员隔离。我希望他们“相信”他们是其网站的管理员,但我不希望他们甚至能够查看我的角色/用户- 当他们位于“用户”中时,实际上向他们隐藏了“管理员”角色面板。
(主持人注意:原始标题为“从用户菜单中删除管理员”)
我创建了一个客户端管理员角色,该角色实质上是一个具有添加/删除用户功能的编辑器。文章“ 编辑者可以创建除管理员以外的任何新用户 ”在帮助防止我的新客户端管理员角色编辑或创建True管理员用户方面表现出色。
但是,理想的做法是在查看用户时将管理员与客户端管理员隔离。我希望他们“相信”他们是其网站的管理员,但我不希望他们甚至能够查看我的角色/用户- 当他们位于“用户”中时,实际上向他们隐藏了“管理员”角色面板。
Answers:
@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
);
}
}
AND {$wpdb->usermeta}.meta_value = 0
和而是使meta值<10像这样:AND {$wpdb->usermeta}.meta_value < 10)
它将显示所有用户,并向所有用户隐藏所有管理员,无论其级别如何。
用户级别已弃用,因此此方法将对照功能进行检查:
/** 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起,可使用action更改用户查询
wp_user_query
在3.6.1中pre_user_query
不起作用,但是可以。不知道3.5.x