回答重新制作,现在按照问题规范进行操作
如果某个特定插件在网络的每个站点中处于活动状态,则要向该站点添加菜单项,我使用Must Use 插件。仅在以下情况下运行is_multisite()
如果is_admin_bar_showing()
.
在本例中,使用以下值实例化插件,以检查插件分析360º并删除所有默认菜单项:
菜单项标题:Analytics360
要检查的插件:analytics360/analytics360.php
菜单项URL:index.php?page=analytics360.php
删除默认值:array( \'newpost\', \'comments\', \'visit\', \'dashboard\' )
<?php
/**
* Plugin Name: Modify My Sites admin menu
* Plugin URI: http://wordpress.stackexchange.com/q/55724/12615
* Description: Add an admin menu link to specific plugin, if it is active in the site. Can remove default items as well.
* Author: Rodolfo Buaiz
* Author URI: http://wordpress.stackexchange.com/users/12615/brasofilo
* License: GPLv3
*
* Class based in http://wordpress.stackexchange.com/a/77236/12615
**/
WPSE_55724_My_Sites_Extra_Items::init(
\'Analytics360\', // Menu item title
\'analytics360/analytics360.php\', // Plugin to check for
\'index.php?page=analytics360.php\', // Menu item URL
array( \'newpost\', \'comments\', \'visit\', \'dashboard\' ) // Remove defaults
);
class WPSE_55724_My_Sites_Extra_Items
{
private static $ins = null;
private static $title = null;
private static $plugin_file = null;
private static $plugin_page = null;
private static $remove_defaults = null;
public static function instance()
{
is_null( self::$ins ) && self::$ins = new self;
return self::$ins;
}
public static function init( $title, $plugin_file, $plugin_page, $remove_defaults )
{
self::$title = $title;
self::$plugin_file = $plugin_file;
self::$plugin_page = $plugin_page;
self::$remove_defaults = $remove_defaults;
if( is_multisite() )
add_action( \'plugins_loaded\', array( self::instance(), \'_setup\' ) );
}
public function _setup()
{
if( is_admin_bar_showing() )
add_action( \'admin_bar_menu\', array( $this, \'add_items\' ), 9999 );
}
/**
* The global var is passed by reference in a do_action_ref_array
*/
public function add_items( $wp_admin_bar )
{
foreach ( (array) $wp_admin_bar->user->blogs as $blog )
{
switch_to_blog( $blog->userblog_id );
// Current menu ID
$menu_id = \'blog-\' . $blog->userblog_id;
// Add URL to current-site/wp-admin/plugins.php
$wp_admin_bar->add_menu( array(
\'parent\' => $menu_id,
\'id\' => $menu_id . \'-p\',
\'title\' => __( \'Plugins\' ),
\'href\' => admin_url( \'plugins.php\' ),
) );
// Remove default menu items
$this->remove_items(
&$wp_admin_bar,
self::$remove_defaults,
$menu_id
);
// Add custom menu for chosen Plugin it active in current site or network activated
if( current_user_can( \'manage_options\' ) && ( $this->is_plugin_active( self::$plugin_file ) || $this->is_plugin_active_for_network( self::$plugin_file ) ) )
{
$wp_admin_bar->add_menu( array(
\'parent\' => $menu_id,
\'id\' => $menu_id . \'-my-p\',
\'title\' => self::$title,
\'href\' => admin_url( self::$plugin_page ),
) );
}
restore_current_blog();
}
}
/**
*
*/
private function remove_items( $wp_admin_bar, $items, $menu_id )
{
if( in_array( \'newpost\', $items ) )
$wp_admin_bar->remove_menu( $menu_id . \'-n\' ); // New Post
if( in_array( \'comments\', $items ) )
$wp_admin_bar->remove_menu( $menu_id . \'-c\' ); // Comments
if( in_array( \'visit\', $items ) )
$wp_admin_bar->remove_menu( $menu_id . \'-v\' ); // Visit Site
if( in_array( \'dashboard\', $items ) )
$wp_admin_bar->remove_menu( $menu_id . \'-d\' ); // Dashboard
}
/**
* WP function uses is_plugin_active_for_network
* which doesn\'t work in frontend
*/
private function is_plugin_active( $plugin )
{
return in_array( $plugin, (array) get_option( \'active_plugins\', array() ) );
}
private function is_plugin_active_for_network( $plugin )
{
$plugins = get_site_option( \'active_sitewide_plugins\');
if ( isset($plugins[$plugin]) )
return true;
return false;
}
}