Plugin de WordPress que te permite gestionar qué plugins están activos en cada sitio de tu red multisite

BY AdminRadio No comments

 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:

  1. 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
  2. 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
  3. Características de seguridad:
    • Verificación de nonces para todas las operaciones
    • Comprobaciones de permisos apropiadas
    • Sanitización de datos

Para instalar el plugin:

  1. Crea una nueva carpeta en wp-content/plugins/ llamada multisite-plugin-manager
  2. Guarda el código en un archivo llamado multisite-plugin-manager.php dentro de esa carpeta
  3. 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();

0 comentarios:

Publicar un comentario