Sometimes it is good to hide a user from other users so that user won't be deleted or modified accidentally by another administrator. This especially good for hiding the hosting user or any machine/automation user.
Setup
So let's setup a plugin main file. Within wp-content/mu-plugins
, add a file, hide-user.php
.
<?php | |
/** | |
* Plugin Name: WPS User | |
* Plugin URI: https://wpsmith.net | |
* Description: User management. | |
* Author: Travis Smith <[email protected]> | |
* Author URI: https://wpsmith.net | |
* Text Domain: wps | |
* Domain Path: /languages | |
* Version: 0.1.0 | |
*/ | |
/** | |
* Plugin main file. | |
* | |
* @package WPS\Plugins\HideUser | |
* @author Travis Smith <[email protected]> | |
* @license GPL-2.0+ | |
* @link https://wpsmith.net/ | |
*/ | |
namespace WPS\Plugins\HideUser; |
Now that we are setup, we can hide the user one of two ways:
- Using Composer in a Single File
- Putting All Code in a Single File
Mu-Plugin Using Composer
Create a composer.json
file where we can require my user package (wpsmith/user
) via composer.
{ | |
"name": "wpsmith/hide-user", | |
"description": "Hides user in WordPress Admin.", | |
"type": "project", | |
"license": "GPLv2+", | |
"authors": [ | |
{ | |
"name": "Travis Smith", | |
"email": "[email protected]" | |
} | |
], | |
"minimum-stability": "dev", | |
"require": { | |
"wpsmith/user": "dev-master" | |
} | |
} |
Once we have this file, we can do a composer install
which will install our packages into a folder called vendor
automagically.
In the plugin file (hide-user.php
), we need to require the composer autoloader.
namespace WPS\Plugins\HideUser; | |
// Require the composer autoloader. | |
require 'vendor/autoload.php'; |
Finally, we add the simple code to hide the user(s):
// Use the User Package & hide hidden_user1 & hidden_user2. | |
\WPS\User\HideUser::get_instance( array( | |
'hidden_user1', | |
'hidden_user2', | |
) ); |
Mu-Plugin with All Code
In the plugin file (hide-user.php
), we need to add a hook into the pre_user_query
.
namespace WPS\Plugins\HideUser; | |
add_action( 'pre_user_query', 'WPS\Plugins\HideUser\pre_user_query' ); | |
/** | |
* Remove user from all user queries. | |
* @global \wpdb $wpdb WordPress database abstraction object. | |
* | |
* @param \WP_User_Query $user_search The current WP_User_Query instance, | |
* passed by reference. | |
*/ | |
function pre_user_query( $user_search ) { | |
/** | |
* @var \WP_User $current_user \WP_User object for the current user. | |
*/ | |
$current_user = wp_get_current_user(); | |
if ( ! $current_user->exists() ) { | |
return; | |
} | |
// If the current user is not hidden_user1, let's remove hidden_user1. | |
if ( 'hidden_user1' !== $current_user->user_login ) { | |
global $wpdb; | |
// Now remove our hidden_user1 from the user query. | |
$user_search->query_where = str_replace( | |
'WHERE 1=1', | |
"WHERE 1=1 AND {$wpdb->users}.user_login != 'hidden_user1'", | |
$user_search->query_where | |
); | |
} | |
} |
Credits: Image From Kristina Alexanderson.