Apparently, there's no way to remove one plugin from the Must-Use list...
But then, found a filter that does even better:
show_advanced_plugins
will completely hide the sight of the Must-Use plugins.
After all, if you're trying to hide something of this nature, then hide it all...
It's inside the class WP_Plugins_List_Table
and takes two arguments: a boolean and the plugin type (mustuse
and dropins
).
Check this article for a reference of MU and specially Drop-ins. But, for the sake of the wiki, I'll post the DI table at the end of this answer.
Update:
- mu-plugin
updated to multiple users and multiple hide plugins was string now it's array
The Drop-in plugin
For testing this procedure we need one of those. Create a file named db.php
at the root of your wp-content folder and copy this:
<?php
/*
Plugin Name: Just for testing Drop-ins
Version: 0.1
Author: WPSE-53866
Author URI: http://wordpress.stackexchange.com/
*/
The Must-use plugin
Then, this one inside the mu-plugins
folder, and set the parameters of the class.
<?php
/*
Plugin Name: Hide Must-Use and Drop-ins from the Plugins listing
Plugin URI: http://wordpress.stackexchange.com/questions/53866
Description: Used to hide the Must-Use and Drop-ins plugins from all users except one. Also can hide a selected plugin from the regular list, be it active or not.
Version: 1.1
Author: brasofilo
AuthorURI: http://wordpress.stackexchange.com/users/12615/
*/
/**
* Parameters of the class - sorry for the non-standard documentation
*
* @super_admin : array (required) : the users which are able to see everything
* @can_see_mustuse : boolean (required) : can other users see the Must-Use list?
* @can_see_dropins : boolean (required) : can other users see the Drop-ins list?
* @hide_this_one : array (optional) : plugins to hide in the regular listing
*
* Reference article for Must-Use and Drop-ins
* http://hakre.wordpress.com/2010/05/01/must-use-and-drop-ins-plugins/
*/
add_action('admin_init', 'wpse_53866_fire_plugin');
function wpse_53866_fire_plugin()
{
global $pagenow;
if( 'plugins.php' != $pagenow)
return;
$wpse53866_HideAdvancedPlugins_instance = new Wpse53866_HideAdvancedPlugins(
array(
'super_admin' => array('Rodolfo','roda'),
'can_see_mustuse' => false,
'can_see_dropins' => true,
'hide_this_ones' => array( 'set-user-locale.php', 'akismet/akismet.php' )
)
);
}
class Wpse53866_HideAdvancedPlugins
{
public function __construct($data)
{
$this->user = $data['super_admin'];
$this->mustuse = $data['can_see_mustuse'];
$this->dropins = $data['can_see_dropins'];
$this->hide = isset( $data['hide_this_ones'] ) ? $data['hide_this_ones'] : false;
if($this->hide)
add_filter( 'all_plugins', array(&$this, 'on_list_plugins' ) );
add_filter( 'show_advanced_plugins', array(&$this, 'on_list_advanced' ), 10, 2 );
}
public function on_list_plugins($plugins)
{
global $current_user;
if( ! in_array( $current_user->user_login, $this->user ) )
{
foreach( $this->hide as $plug )
unset( $plugins[$plug] );
}
return $plugins;
}
public function on_list_advanced($show, $type)
{
global $current_user;
if( ! in_array( $current_user->user_login, $this->user ) )
{
if( 'mustuse' == $type )
return $this->mustuse;
if( 'dropins' == $type )
return $this->dropins;
}
return true;
}
}
Reference
by hakre on wordpress
No MustUse nor DontDisable here, folks, please, move along, move along...
:) You know you can +100, right? :P