Como hacer un plugin básico para Multisite

  • 27/05/2013

Lo primero es poner en la cabecera del plugin Network: true.
Eso hará con que, sí estamos en una instalación Multisite, el plugin solo aparezca en /wp-admin/network/plugins.php. Y no aparece disponible para instalación en ninguna pantalla /wp-admin/plugins.php.
Si no es un Multisite, aparece normalmente en la pantalla tradicional de Plugins.

Para iniciar un nuevo menú, verificamos si es MS y usamos el hook adecuado:

$hook = is_multisite() ? 'network_' : '';
add_action( "{$hook}admin_menu", 'b5f_make_menu' );

Y, en la función asignada, hacemos la misma verificación para añadir un menú MS o uno normal, y para definir los permisos:

function b5f_make_menu()
{
	$hook = is_multisite() ? 'settings.php' : 'options-general.php';
	$cap  = is_multisite() ? 'manage_network_options' : 'delete_users';
	add_submenu_page(
		$hook,
		'Título del Menú', 
		'Título del Menú', 
		$cap, 
		'slug-del-menu', 
		'funcion_para_imprimir_la_pantalla_del_plugin' 
	);
}

Guía extendida en Stack Overflow: How to adapt my plugin to Multisite?

Y aqui va un mini-plugin de demonstración, como casi siempre, basado en Plugin Class Demo, de Thomas Scholz (toscho).
Ver documentación del código en el Gist del maestro.

<?php
/**
 * Plugin Name: Plugin Multisite o Normal
 * Plugin URI: http://brasofilo.com/?p=1963
 * Description: Demonstración de Plugin para Multisite 
 * Version: 1.0
 * Author: Rodolfo Buaiz
 * Network: true
 * Author URI: http://wordpress.stackexchange.com/users/12615/brasofilo
 * Licence: GPLv2 or later
 */

if( is_admin() )
{
	add_action(
		'plugins_loaded', 
		array( B5F_Plugin_Multisite::get_instance(), 'plugin_setup' )
	);
}

class B5F_Plugin_Multisite
{
	protected static $instance = NULL;

	public function __construct() { }

	public static function get_instance()
	{
		NULL === self::$instance and self::$instance = new self;
		return self::$instance;
	}

	public function plugin_setup()
	{
		$hook = is_multisite() ? 'network_' : '';
		add_action( "{$hook}admin_menu", array( $this, 'make_menu' ) );
	}

	public function make_menu()
	{
		$pagina = is_multisite() ? 'settings.php' : 'options-general.php';
		$titulo = is_multisite() ? 'Plugin Multisite' : 'Plugin Normal';
		add_submenu_page(
			$pagina,
			$titulo, 
			$titulo, 
			'delete_users', 
			'plugin-multisite', 
			array( $this, 'pantalla_del_plugin' ) 
		);
	}

	public function pantalla_del_plugin()
	{
		$titulo = is_multisite() ? 'Plugin Multisite' : 'Plugin Normal';
		echo "
		<div class='wrap'>
			<div id='icon-tools' class='icon32'></div> 
			<h2>$titulo</h2>
			<div id='poststuff'>
				<input class='button-primary' type='submit' name='Ejemplo de Boton' value='Hola!' /> 
			</div>
		</div>";
	}
}

Leave a reply

This entry was posted in Tutorial and tagged , on .