在 WordPress 管理仪表板上的用户列表中隐藏具有特定角色的用户
Hide users with a specific role from users list on WordPress admin dashboard
我有两个角色,称为代理人和子代理人。
我想从管理员用户列表中隐藏这两个特定角色。
我尝试使用 pre_user_query
过滤器,但无法正常工作。
谁能推荐一个正确的方法?
谢谢,
我在这里找到了我想要的完美解决方案:https://rudrastyh.com/wordpress/pre_user_query.html
add_action('pre_user_query','hide_all_agents_subagents');
function hide_all_agents_subagents( $u_query ) {
$current_user = wp_get_current_user();
if ( $current_user->roles[0] != 'administrator' ) {
global $wpdb;
$u_query->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 '%agent%' AND {$wpdb->usermeta}.meta_value NOT LIKE '%subagent%')",
$u_query->query_where
);
}
}
更简单更安全:
add_filter('pre_get_users', function ($user_query) {
// use the sluglike role names, not their "display_name"s
$user_query->set('role__not_in', ['agent', 'subagent']);
});
role__not_in
从 WP 4.4 开始可用。
警告:角色(及其用户数)仍将显示在用户上方 table。
我有两个角色,称为代理人和子代理人。 我想从管理员用户列表中隐藏这两个特定角色。
我尝试使用 pre_user_query
过滤器,但无法正常工作。
谁能推荐一个正确的方法?
谢谢,
我在这里找到了我想要的完美解决方案:https://rudrastyh.com/wordpress/pre_user_query.html
add_action('pre_user_query','hide_all_agents_subagents');
function hide_all_agents_subagents( $u_query ) {
$current_user = wp_get_current_user();
if ( $current_user->roles[0] != 'administrator' ) {
global $wpdb;
$u_query->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 '%agent%' AND {$wpdb->usermeta}.meta_value NOT LIKE '%subagent%')",
$u_query->query_where
);
}
}
更简单更安全:
add_filter('pre_get_users', function ($user_query) {
// use the sluglike role names, not their "display_name"s
$user_query->set('role__not_in', ['agent', 'subagent']);
});
role__not_in
从 WP 4.4 开始可用。
警告:角色(及其用户数)仍将显示在用户上方 table。