从用户列表中隐藏特定用户的角色。 WordPress管理仪表板

时间:2018-08-03 07:56:50

标签: wordpress wordpress-admin

我有一个角色Agent和Subagent。 我希望当时管理员登录并访问admin中的用户列表时,我想从用户列表中隐藏这两个特定角色用户列表。

我尝试使用pre_user_query过滤器,但不起作用。

任何人都可以提出建议并采取正确的方法。

谢谢

2 个答案:

答案 0 :(得分:2)

更简单、更安全:

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 起可用。

警告:角色(及其用户数)仍会显示在用户表上方。

答案 1 :(得分:1)

我有一个理想的解决方案。

在这里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
    );
}
}

谢谢