Puedes hacer esto con un archivo sunrise.php personalizado. Esta es esencialmente la forma en que funciona el complemento de mapeo de dominios, sin embargo, le pone un extremo bonito. Para algo personalizado, puedes escribir algunos PHP simples para hacer básicamente lo mismo.
La esencia de multisitio consiste en averiguar a qué sitio servir. El complemento de asignación de dominios lo hace creando una tabla wp_domain_mapping y almacenando la información allí. Por lo tanto, cuando recibe una solicitud de xxx.com, busca en esa tabla y ve que corresponde a blog_id 123.
Primero, haga una configuración de WordPress y hágala multisitio. No importa donde realmente vive, porque vamos a cambiar todo eso. Para simplificar, lo pondré en blog.stackexchange.com y lo convertiré en un sitio de tipo subdirectorio (son más fáciles). Los subdirectorios creados probablemente serían las babosas. / wordpress, / apple, / lo que sea.
Así que sí, para empezar, de hecho lo está haciendo en vivo en blog.stackexchange.com/wordpress. Considera esto tu entorno de puesta en escena. Cuando creas cada sitio, puedes hacer cosas aquí hasta que decidas activar el mapeo.
Para realizar la asignación de dominios usted mismo, sin el complemento, haría algo como esto:
Paso uno: agrega define( 'SUNRISE', 'on' );
a la parte superior de tu archivo wp-config.php.
Paso dos: crea un archivo sunrise.php en el directorio wp-content. Para empezar, ponga <?php
en la parte superior.
Paso tres: En el archivo sunrise.php va a ser tu lógica para determinar qué sitio cargar.
Vas a basar esto en la variable $_SERVER[ 'HTTP_HOST' ]
. Cómo hacer eso exactamente es fácil: como quieras hacerlo. Si solo desea escribir una expresión regular para buscar '/blog\.(.*)\.stackexchange\.com/'
y luego buscar ese bit en la base de datos, puede hacerlo.
Ya que está usando la misma bala aquí como el "subdirectorio", no necesita una tabla separada. Simplemente puede buscar en la tabla principal wp_blogs para encontrar el sitio que necesita. Algo similar a esto:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );
Una vez que tenga el $ current_blog, necesitará el siguiente código:
$current_blog->domain = $_SERVER[ 'HTTP_HOST' ];
$current_blog->path = '/';
$blog_id = $current_blog->blog_id;
$site_id = $current_blog->site_id;
$current_site = $wpdb->get_row( "SELECT * from {$wpdb->site} WHERE id = '{$current_blog->site_id}' LIMIT 0,1" );
$current_site->blog_id = $current_blog->blog_id;
Esto predetermina las variables globales $ current_blog y $ current_site en lugar de permitir que las funciones de MU de WordPress lo hagan.
Esto sería suficiente para que el sitio funcione y funcione (después de que su DNS lo señale y resuelva el alojamiento del alojamiento virtual), sin embargo, la mayoría de las URL estáticas utilizadas en el código HTML aún apuntan al blog. stackexchange.com/wordpress, ya que ahí es donde realmente estaría el sitio. Además, a la función URL canónica probablemente no le guste la URL y también te redireccionará.
Para solucionar estos problemas, es probable que también desee predefinir varias de las URL asociadas con el sitio. Cosas como WP_SITEURL y WP_HOME. Además, WP_CONTENT_URL, WP_PLUGIN_URL y WPMU_PLUGIN_URL. Eso debería abarcar la mayoría de los casos de URL ajustadas.
Finalmente, querrás configurar 'COOKIE_DOMAIN'. Dado que es probable que desee que los inicios de sesión se compartan en todo el conjunto, puede configurarlo en stackexchange.com, o incluso más, si no desea que sean inicios de sesión compartidos.
Si desea hablar sobre la integración del sistema de inicio de sesión de stackexchange normal en WordPress, también puedo responder preguntas sobre eso, pero sería una respuesta un poco más detallada. :)
No dude en enviarme un correo electrónico si desea más ayuda con esto. Encantado de ayudar: otto en wordpress.org.