Múltiples (WordPress + bbPress + MediaWiki) en uno

WordPress + bbPress + Mediawiki

Imagínate que estamos en esta situación:

Tenemos un sitio web colaborativo (tipo wiki) multi-idioma, cada idioma está en un subdominio, cada uno de estos subdominios tiene su portal hecho con WordPress, sus foros con bbPress y sus wikis con MediaWiki, una extra para compartir los archivos (como el Wikimedia Commons) y queremos que los usuarios y las cookies estén unificados, integrados.

De acuerdo, parece algo un tanto descabellado, pero es posible. Pero te aviso que este artículo es bastante extenso, y quizá pesado.

Entonces, con lo que hemos visto, vamos a integrar lo siguiente:

Por supuesto, la cantidad puede ser mayor, pero yo lo explico así porque es lo que yo uso.

Este tutorial también te sirve si no quieres hacer la integración con MediaWiki, por lo que puedes dejarlo antes de tiempo
😆

WordPress

Para empezar, haz las dos instalaciones de WordPress ((Mejor que estén en la misma base de datos, para facilitar las cosas y porque no he encontrado ninguna forma de hacerlo con bases de datos distintas)).

Muy importante: Para que la integración de las cookies funcione correctamente, especialmente en el tema de integración con bbPress, las instalaciones deberían estar en subdominios distintos pero con nombres de directorio iguales.

Es necesario que añadas las «Claves únicas de autentificación» ((Por seguridad y para mejorar la integración)). Ponlas iguales entre los blogs, no entre ellas, para después conseguir unificar las cookies. Esto es bastante importante. La clave NONCE_KEY de cada instalación debería ser distinta. Puedes usar el generador automático que ponen los creadores de WordPress a tu disposición.

Y siento hacerme pesado, pero recuerda poner las claves iguales entre los blogs, no entre ellas, y poner las NONCE_KEY distintas, por seguridad.

Una vez lo hayas hecho, decide cuál de las dos instalaciones será la principal (por ejemplo, la que tenga el prefijo «wp1_«) y cuál la secundaria (en este caso, «wp2_«). Ahora, editemos el archivo wp-config.php esta última. Después de la definición del prefijo de las tablas, hay que añadir:

define('CUSTOM_USER_TABLE', 'wp1_users'); // Integración de los usuarios

Para facilitar las cosas, no es necesario compartir la tabla usermeta, ya que si lo haces deberás añadirle unas cuantas cosillas para no perder el acceso administrativo al segundo blog. Lo único bueno de unirlas es que el nombre para mostrar, si es distinto al nombre de usuario, se actualizará en todas las instalaciones. También te sirve, el compartirla, para tener todos los permisos de usuario juntitos, pero como solamente es una cosa visual por si accedes a la BD, mejor no tocarlo ((Yo lo he juntado, lo reconozco. Pero me ha dado unos cuantos quebraderos de cabeza hasta que he descubierto cómo se devolvían los permisos)).

Por cierto, también recomiendo, una vez hechos estos cambios, seguir el tutorial que hizo ejner69 sobre Cambiar el nombre al usuario admin para poder tener el nombre de usuario que quieras.

Lo que falta ahora es integrar las cookies completamente. Esto es algo más tocanarices según cómo tengas montado el tinglado (subdominios, bases de datos, etc.). Yo lo tengo de una forma tan bonita que me ha llevado tres días conseguirlo.

Para encriptar los datos de inicio de sesión, WordPress usa, aparte de las claves AUTH_KEY, SECURE_AUTH_KEY y LOGGED_IN_KEY, otras claves aleatorias y únicas que genera durante la instalación llamadas AUTH_SALT y LOGGED_IN_SALT (y SECURE_AUTH_COOKIE si usas una conexión SSL) y que las guarda en la base de datos. Teniendo esto en cuenta, parece que puede ser difícil integrarlo todo, pero no es así. Simplemente hay que definirlas en el wp-config.php de cada instalación para que sean iguales.

Como si utilizas subdominios dentro del mismo dominio también serán distintos los nombres de las cookies, porque los pone en función del subdominio, al final mejor que hagas una cosa como ésta:

/**
 * Integraciones de cookies
 */
define('COOKIE_DOMAIN', '.dominio.tld'); // Para que sirva en todos los subdominios del dominio
define('COOKIEPATH', '/');
define('AUTH_SALT', 'loquetuquieras');
define('LOGGED_IN_SALT', 'otracosadistinta');
define('AUTH_COOKIE', 'nombredelaweb_numerosyminusculas');
define('SECURE_AUTH_COOKIE', 'nombredelaweb_sec_numerosyminusculas'); // Si usas conexión SSL
define('LOGGED_IN_COOKIE', 'nombredelaweb_logged_in_numerosyminusculas');
define('TEST_COOKIE', 'nombredelaweb_test_cookie');

Donde pone numerosyminusculas, pon lo miso en las tres. Lo más recomendable es, por ejemplo, el hash md5 del dominio de tu web o el hash md5 de una frase aleatoria ((Puedes generar esos hashes mediante esta herramienta online)). Eso es simplemente para ponerles un nombre único y que no moleste a las cookies de otras webs.

Ahora puedes probar e iniciar sesión en la instalación que quieras y acceder a la otra. Verás que la sesión también está iniciada. Ten en cuenta que la contraseña del usuario será la que tengas en la instalación de la tabla compartida, lógicamente. Si pruebas a cerrar sesión, verás que también se cierra en ambos

bbPress

Aquí hay que prestar especial atención en la instalación si queremos hacerla más fácil. Para empezar, te recomiendo que añadas el archivo de traducción que ha hecho Fernando dentro de la carpeta /bb-includes/languages. Una vez lo hayas hecho, es tan fácil como acceder a la URL donde estará el foro y escoger es_ES de la lista desplegable. Luego, ¡Vamos a ello!.

Rellenamos la configuración de la base de datos y seguimos con la instalación como si no fueras a integrar WordPress. En este caso, sí que puedes poner las instalaciones de bbPress en bases de datos distintas de las de WordPress. Incluso distintas entre ellas.

Muy importante: Dentro de las claves de seguridad, debes poner las mismas que en la instalación de los WordPress, excepto la NONCE, que debería ser distinta por seguridad.

Una vez llegamos a la página para escoger el nombre de usuario, ponle el mismo que al de la instalación del WordPress. Si no se lo has cambiado, pon admin.

Y haz lo mismo para el segundo foro. Ten en cuenta que lo de las cookies solamente servirá si están en subdominios distintos pero en carpetas con el mismo nombre, que me he pasado muchísimo rato intentando que no sea así, pero lo es.

Ahora hay que editar el archivo bb-config.php de cada instalación. Añade antes del ?>:

/**
 * Integraciones de usuarios
 */

/* Integración de la base de datos */
$bb->wp_table_prefix = 'wp1_'; // El prefijo de una de las dos instalaciones de WordPress
$bb->user_bbdb_name = 'bd_wordpress'; // Base de datos donde están los WordPress
$bb->user_bbdb_user = 'usuario_bd_wordpress'; // Usuario de la base de datos donde están los WordPress
$bb->user_bbdb_password = 'contraseña_bd_wordpress'; //Contraseña de la base de datos de los WordPress
$bb->user_bbdb_host = 'host_bd'; // Host de la base de datos de los WordPress, usualmente 'localhost'
$bb->user_bbdb_charset = 'juego_caracteres'; // El juego de caracteres de la base de datos de los WordPress; usualmente 'utf8'
$bb->user_bbdb_collate = ''; // Si no sabes qué es, déjalo en blanco
$bb->custom_user_table = 'wp1_users'; // La tabla compartida de usuarios

/* Integración de las cookies */
$bb->bb_auth_salt = 'AUTH_SALT'; //Igual que en los WordPress
$bb->bb_logged_in_salt = 'LOGGED_IN_SALT'; //Igual que en los WordPress
$bb->wp_siteurl = 'http://subdominio.dominio.tld/directorio-wp'; // URL de acceso a tu WordPress 
$bb->wp_home = 'http://subdominio.dominio.tld/directorio-instalacion-wp'; // URL de instalación de tu WordPress
$bb->cookiedomain = '.dominio.tld';
$bb->cookiepath = '/';
$bb->authcookie = 'AUTH_COOKIE'; //Igual que en los WordPress
$bb->secure_auth_cookie = 'SECURE_AUTH_COOKIE'; //Igual que en los WordPress
$bb->logged_in_cookie = 'LOGGED_IN_COOKIE'; //Igual que en los WordPress
$bb->admin_cookie_path = '/directorio-bbpress/bb-admin'; // Directorio (de la URL) donde está 'bb-admin'
$bb->core_plugins_cookie_path = '/directorio-bbpress/bb-plugins'; // Directorio (de la URL) donde está 'bb-plugins'
$bb->user_plugins_cookie_path = '/directorio-bbpress/my-plugins'; // Directorio (de la URL) donde está 'my-plugins'
$bb->sitecookiepath = '/directorio-instalacion-wp/'; // Directorio (de la URL) de instalación de WordPress; por esto es por lo que era necesario que fueran subdominios distintos pero en directorios con el mismo nombre
$bb->wp_admin_cookie_path = '/directorio-instalacion-wp/wp-admin'; // Directorio (de la URL) donde está 'wp-admin' 
$bb->wp_plugins_cookie_path = '/directorio-instalacion-wp/wp-content/plugins'; // Directorio (de la URL) donde está la carpeta de plugins de WordPress

/**
 * Final de las integraciones de usuarios
 */

AVISO: Donde pone >, debes poner >. Eso es culpa del WordPress, que lo muestra mal.

Cuando en los comentarios digo directorio (de la URL), me refiero justamente a eso, no al directorio completo en el servidor.

Terminando la integración de WordPress + bbPress

¿Te pensabas que ya estaba? Pues no está, no. Ahora solamente falta instalar el plugin bbPress Integration en tus WordPress.

Una vez lo hayas hecho, entra en Opciones -> bbPress Integration y en la URL de bbPress pon:

Eso del subdominio inventado es para que funcionen las cookies, por supuesto 😆 La URL de los plugins puedes dejarla perfectamente en blanco. Recuerda hacerlo en cada uno de tus WordPress o habrá veces que te será imposible entrar al panel de administración de tus bbPress.

Ahora ya están listas las integraciones de WordPress + bbPress. Puedes probarlo inciando sesión y cerrándola en cualquiera de tus cuatro instalaciones. Verás qué pasada 😀

Ahora, si quieres, puedes seguir leyendo para saber cómo integrarlo con MediaWiki que, aunque parezca mentira, creo que es más sencillo.

Integrándolo todo con MediaWiki

Vale, veo que quieres seguir con esta señora instalación. Me alegro.

No me voy a entretener explicándote cómo se instala MediaWiki, doy por asumido que lo sabes. Pero te recomiendo que hagas las instalaciones de las MediaWiki en una misma base de datos, aunque sea distinta de donde están los WordPress.

Para integrarlo, descárgate el archivo AuthWP.php de aquí ((No doy un enlace más directo porque esa web no es mía y a la extensión le falta algún arreglillo para ser casi perfecta)) y guárdalo en el directorio extensions/ de tus MediaWiki. Te recomiendo que tengas un directorio compartido entre todas las wikis donde guardes todas las extensiones y un archivo compartido entre todos tus LocalSettings.php (mediante un require();) que te cargue las extensiones comunes a todas las wikis.

La extensión AuthWP, lo que hace es copiar los usuarios a de WordPress/bbPress a las MediaWiki y juntar las cookies.

Bueno, que me iba de tema. Una vez lo hayas guardado, edítalo y define la variable $WP_relpath siguiendo el siguiente ejemplo:

$WP_relpath = '/directorio/del/servidor/donde/hay/uno/de/los/wordpress';

Una vez lo hayas hecho, si resulta que aún no está actualizada la extensión (en estos momentos está la versión 2008-12-05, que todavía tiene el fallo), deberás editarla un poco para que te funcione. Busca donde diga:

        // MediaWiki API HANDLER
        // See if the given user exists - true if so, false if not...
        function userExists($username) {
                return username_exists($username);
        }

y sustitúyelo por:

        // MediaWiki API HANDLER
        // See if the given user exists - true if so, false if not...
        function userExists($username) {
                global $WP_relpath;
                require_once($WP_relpath.'/wp-includes/registration.php');
                return username_exists($username);
        }

Después, busca:

        // MediaWiki API HANDLER
        // Add a user created in MediaWiki to the WordPress database...
        function addUser($user,$password) {
                require_once($WP_relpath.'/wp-includes/registration.php');
                wp_create_user($user->mName,$password,$user->mEmail);
                return true;
        }

y cámbialo por:

        // MediaWiki API HANDLER
        // Add a user created in MediaWiki to the WordPress database...
        function addUser($user,$password) {
                global $WP_relpath;
                require_once($WP_relpath.'/wp-includes/registration.php');
                wp_create_user($user->mName,$password,$user->mEmail);
                return true;
        }

Vale, ya casi está. En el enlace que te he dado antes para bajar el archivo te dice lo que funciona en estos momentos de la integración y qué no. Lo más importante de lo que falla es:

  • Si cierras sesión en WordPress/bbPress, no la cierras en MediaWiki
  • Si inicias sesión en MediaWiki, no la inicias en WordPress/bbPress

El resto de combinaciones funcionan.

Por suerte, sí que podemos compartir las cookies de las wikis entre ellas para que cuando se cierre la sesión en una wiki, se cierre en el resto y para que cuando se inicie en una wiki, se inicie en el resto. Para eso, en el archivo LocalSettings.php de cada wiki añadimos:

$wgSharedDB = 'basededatosdelaswikis'; // Base de datos de las wikis
$wgSharedPrefix = 'prefijo_'; // El prefijo de la wiki que guardará los datos de los usuarios
$wgSharedTables = array( 'user', 'user_groups' ); // Pon 'user_groups' solamente si quieres compartir los permisos
$wgCookieDomain = ".dominio.tld";

Y ya está, c’est fini, that’s all, això és tot. Si no os creéis que esto funcione, podéis comprobarlo en la Astronomipedia, que intenta ser una wiki sobre astronomía (¡y compatible con la Wikipedia!) y que utiliza todo este tinglado que os acabo de explicar.

Referencias

No, esto no lo he descubierto yo. Todo es gracias a:

¡Suerte! 😉

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(2 votos, promedio: 3)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

12 comentarios en “Múltiples (WordPress + bbPress + MediaWiki) en uno”

  1. Pingback: Bitacoras.com

  2. Gracias a los dos. 😉

    Por cierto, Fernando, me olvidé de indicar en otro código (zona de la extensión para MediaWiki) que los <code>&gt;</code> deberían aparecer como <code>></code> 🙄

    Por cierto, si alguien intenta seguirlo y algo falla, que lo diga, que quizá se me ha pasado algo.

    Saludos 😉

    1. Ya lo he cambiado Isb1009, y una vez metidos en tre las tags de PHP ya se ven correctamente. De paso le he metido ya unas quicktags en el editor HTML para facilitaros la cosa en estos asuntos 🙂

  3. Pingback: Isb1009 :: ¡Tengo excusa!

  4. filex,

    Pues yo lo tengo en un alojamiento compartido, de momento. Prefiero esperar a ver si el proyecto tiene éxito antes de pasarlo a un plan mejor.

    Saludos 😉

  5. Pingback: C

  6. Pingback: Kiran Thomman » Blog Archive » Setting single login across multiple Wordpress 2.7 installs using a single domain

  7. hola, me gustaria saber a que te refieres con

    "las instalaciones deberían estar en subdominios distintos pero con nombres de directorio iguales."

    estoy intentando hacerlo desde el xampp y me estoy liando con la estructura de directorios, podrias decir como te quedó a ti??

    Gracias, estoy intentando llevar a cabo tu idea hacia buen puerto, a ver que sale

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido