He creado un plugin de WordPress que te permite gestionar qué plugins están activos en cada sitio de tu red multisite. Aquí están las características principales:
- Panel de control en el nivel de red:
- Muestra una matriz de todos los sitios y plugins disponibles
- Permite activar/desactivar plugins para cada sitio desde una única interfaz
- Accesible solo para administradores de red
- Panel de control a nivel de sitio:
- Cada administrador de sitio puede ver y gestionar sus plugins
- Interfaz simplificada que muestra solo los plugins relevantes para ese sitio
- Características de seguridad:
- Verificación de nonces para todas las operaciones
- Comprobaciones de permisos apropiadas
- Sanitización de datos
Para instalar el plugin:
- Crea una nueva carpeta en
wp-content/plugins/
llamadamultisite-plugin-manager
- Guarda el código en un archivo llamado
multisite-plugin-manager.php
dentro de esa carpeta - Activa el plugin desde el panel de administración de la red
¿Te gustaría que agregue alguna funcionalidad adicional o que modifique algo del código existente?
<?php
/**
* Plugin Name: Multisite Plugin Manager
* Description: Permite controlar qué plugins están activos en cada sitio de una red WordPress Multisite
* Version: 1.0
* Author: Your Name
* Network: true
*/
// Evitar acceso directo al archivo
if (!defined('ABSPATH')) {
exit;
}
class MultisitePluginManager {
public function __construct() {
add_action('network_admin_menu', array($this, 'add_network_menu'));
add_action('admin_menu', array($this, 'add_site_menu'));
add_action('admin_init', array($this, 'save_settings'));
}
// Agregar menú en el panel de administración de la red
public function add_network_menu() {
add_submenu_page(
'settings.php',
'Multisite Plugin Manager',
'Plugin Manager',
'manage_network_plugins',
'multisite-plugin-manager',
array($this, 'network_settings_page')
);
}
// Agregar menú en cada sitio individual
public function add_site_menu() {
if (!is_network_admin()) {
add_options_page(
'Site Plugin Settings',
'Site Plugins',
'manage_options',
'site-plugin-settings',
array($this, 'site_settings_page')
);
}
}
// Página de configuración de la red
public function network_settings_page() {
$sites = get_sites();
$all_plugins = get_plugins();
?>
<div class="wrap">
<h1>Multisite Plugin Manager</h1>
<form method="post" action="">
<?php wp_nonce_field('save_network_settings', 'plugin_manager_nonce'); ?>
<table class="widefat">
<thead>
<tr>
<th>Site</th>
<?php foreach ($all_plugins as $plugin_file => $plugin_data): ?>
<th><?php echo esc_html($plugin_data['Name']); ?></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<?php foreach ($sites as $site): ?>
<?php
$blog_id = $site->blog_id;
$site_plugins = get_blog_option($blog_id, 'active_plugins', array());
?>
<tr>
<td><?php echo esc_html(get_blog_details($blog_id)->blogname); ?></td>
<?php foreach ($all_plugins as $plugin_file => $plugin_data): ?>
<td>
<input type="checkbox"
name="site_plugins[<?php echo $blog_id; ?>][]"
value="<?php echo esc_attr($plugin_file); ?>"
<?php checked(in_array($plugin_file, $site_plugins)); ?>>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php submit_button('Save Changes'); ?>
</form>
</div>
<?php
}
// Página de configuración individual del sitio
public function site_settings_page() {
$blog_id = get_current_blog_id();
$site_plugins = get_option('active_plugins', array());
$all_plugins = get_plugins();
?>
<div class="wrap">
<h1>Site Plugin Settings</h1>
<form method="post" action="">
<?php wp_nonce_field('save_site_settings', 'plugin_manager_nonce'); ?>
<table class="widefat">
<thead>
<tr>
<th>Plugin</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php foreach ($all_plugins as $plugin_file => $plugin_data): ?>
<tr>
<td><?php echo esc_html($plugin_data['Name']); ?></td>
<td>
<input type="checkbox"
name="site_plugins[]"
value="<?php echo esc_attr($plugin_file); ?>"
<?php checked(in_array($plugin_file, $site_plugins)); ?>>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php submit_button('Save Changes'); ?>
</form>
</div>
<?php
}
// Guardar configuración
public function save_settings() {
if (!isset($_POST['plugin_manager_nonce'])) {
return;
}
// Verificar si estamos en la red o en un sitio individual
if (is_network_admin()) {
if (!wp_verify_nonce($_POST['plugin_manager_nonce'], 'save_network_settings')) {
wp_die('Security check failed');
}
if (isset($_POST['site_plugins']) && is_array($_POST['site_plugins'])) {
foreach ($_POST['site_plugins'] as $blog_id => $plugins) {
update_blog_option($blog_id, 'active_plugins', array_map('sanitize_text_field', $plugins));
}
}
} else {
if (!wp_verify_nonce($_POST['plugin_manager_nonce'], 'save_site_settings')) {
wp_die('Security check failed');
}
if (isset($_POST['site_plugins'])) {
update_option('active_plugins', array_map('sanitize_text_field', $_POST['site_plugins']));
}
}
}
}
// Inicializar el plugin
new MultisitePluginManager();