Icono del sitio Imacreste

Programar para WordPress multisite

Como hemos comentado en otras entradas Wordpress nos permite crear una red de sitios, cada sitio con su tema… y pudiendo compartir contenido entre ellas o incluso usuarios. Ahora vamos a repasar las variaciones que deberíamos de incluir en nuestros plugins o fichero functions.php para que nuestros desarrollos funcionen correctamente en este nuevo entorno.

Funciones multisite

Al crear el multisite pasamos de tener un sitio, a tener varios. Es por este motivo que debemos tener en cuenta sus ID_BLOG. En multisite 1 blog es lo mismo que 1 sitio por eso la clave es id_blog. Y en cuanto a la base de datos, se crean tablas para cada sitio, que incluyen el id_blog como por ejemplo tendremos wp_2_posts para nuestro id_blog=2 (Siempre que el prefijo sea wp_, que no debería ;-)).

global $blog_id;
echo $blog_id;

En primer lugar cargamos la variable global, y luego mostramos por pantalla el id del sitio que estamos viendo, este código podemos meterlo en un tema por ejemplo para cargar unos css diferentes en función del sitio.

if (is_multisite()){
echo "Sí";
}else{
echo "no";
}

En este caso comprobamos si el sitio tiene instalado multisite.

print_r(get_blog_details(3));

En este caso vemos la información de configuración del sitio = 3 la información que devuelve es: nombre del blog, dominio, descripción, fecha de creación, tipo de sitio, etc.

switch_to_blog(3);
//trabajamos con los datos del blog 3
restore_current_blog();

Estas 2 funciones lo que permiten es conectarnos con un sitio diferente del actual. Por ejemplo, queremos mostrar los 5 últimos entradas del sitio 3, pero en el tema del sitio = 1. La segunda línea es fundamental, ya que nos permite volver al blog actual, si obviamos esta etiqueta los resultados serán desastrosos. El funcionamiento es: estoy en el sitio 1, me conecto con el 3, recupero la información necesaria de ese sitio, y vuelvo a mi sitio actual.

En medio de estas funciones podemos usar cualquier función de WordPress por ejemplo podemos pintar el menú de otro sitio, un widget, un listado de usuarios, etc.

También existen funciones para crear sitios desde la programación:

<?php wpmu_create_blog( $domain, $path, $title, $user_id, $meta, $site_id ) ?>

Y por último, podemos crear menús o submenús en el administrador de red, por ejemplo para crear un plugin exclusivo multisite, o porque un plugin requiere una configuración para todos los sitios.

add_action('network_admin_menu','mi_menu');
function mi_menu(){
add_menu_page(-----);
}

En este caso basta con conectaros mediante un hook específico para multisite: network_admin_menu. La función que crea el menú: add_menu_page, es la misma que para WordPress estándar. Y para crear submenús exactamente igual solo debemos conocer cómo hacer referencia a los submenus que vienen por defecto:

Por ejemplo: creamos un submenú dentro de temas en administrador de la red:

add_action('network_admin_menu','mi_menu'); 
function mi_menu(){ 
add_submenu_page('themes.php',-----); 
}

Almacenar variables para todo el sitio

En algunos casos necesitamos tener variables de un sitio o variables comunes para todos los sitios, por un lado tenemos la generación de variables para un sitio concreto:

add_blog_option(3,'Precio','17');

En este caso creamos una variable precio = 17 para el sitio = 3.

Y para crear variables para todo el sitio tenemos:

Podemos encontrar más funciones en el codex.

Salir de la versión móvil