In my testing environment, I’ve got one hundred plugins. I’m more interested in seeing first the Active plugins than the complete list (All
).
How can I change the default screen for the Plugins menu item?
In my testing environment, I’ve got one hundred plugins. I’m more interested in seeing first the Active plugins than the complete list (All
).
How can I change the default screen for the Plugins menu item?
There are two options, modify the menu link href
attribute or redirect the main screen.
Alter the global variable $submenu
. This method works for Single and Multisite.
Problem: the submenu item Installed Plugins
doesn’t show in bold.
add_action( 'admin_head', 'b5f_plugins_redirect_to_active' );
function b5f_plugins_redirect_to_active()
{
global $submenu;
$submenu['plugins.php'][5][2] .= "?plugin_status=active";
return;
}
Hook into load-plugins.php
. Multisite detection is needed, but there are no UI problems.
add_action( 'load-plugins.php', 'b5f_ms_plugins_redirect_to_active' );
function b5f_ms_plugins_redirect_to_active()
{
// Trick, plugin_status is only false in WP default screen
// ['action'] prevents us interfering with activation/deactivation
if( isset( $_GET['plugin_status'] ) || isset( $_GET['action'] ) )
return;
// Check for MS dashboard, redirect accordingly
if( is_network_admin() )
wp_redirect( network_admin_url( 'plugins.php?plugin_status=active' ) );
else
wp_redirect( admin_url( 'plugins.php?plugin_status=active' ) );
exit();
}
And a couple of extras:
Active
add_action( 'admin_menu', 'rename_submenu_item', 99 );
function rename_submenu_item()
{
global $submenu;
foreach( $submenu['plugins.php'] as $key => $value )
{
if( in_array( 'activate_plugins', $value ) )
$submenu['plugins.php'][$key][0] = __( 'Active' );
}
}
All
The submenu link is hacked, as well as some jQuery printed to fix the submenus active
state:
add_action( 'admin_menu', 'menu_admin_wpse_44270' );
add_action( 'admin_head-plugins.php', 'highlight_menu_item_wpse_44270' );
function menu_admin_wpse_44270()
{
add_submenu_page(
'plugins.php',
'Drafts',
'<span id="my-all-plugins">All</span>',
'edit_pages',
'plugins.php?plugin_status=all'
);
}
function highlight_menu_item_wpse_44270()
{
if( isset( $_GET['plugin_status'] ) && 'all' == $_GET['plugin_status'] )
{
?>
<script type="text/javascript">
jQuery(document).ready( function($)
{
var reference = $('#my-all-plugins').parent().parent();
// add highlighting to our custom submenu
reference.addClass('current');
//remove higlighting from the default menu
reference.parent().find('li:nth-child(2)').removeClass('current');
});
</script>
<?php
}
}