Puede hacer esto con un archivo sunrise.php personalizado. Esta es esencialmente la forma en que funciona el complemento de mapeo de dominio, sin embargo, le pone un bonito front-end. Para algo personalizado, puede escribir un PHP simple para hacer básicamente lo mismo.
La esencia de multisitio implica averiguar qué sitio servir. El complemento de mapeo de dominios hace esto creando una tabla wp_domain_mapping y almacenando la información allí. Por lo tanto, cuando recibe una solicitud de xxx.com, se ve en esa tabla y ve que corresponde al blog_id 123.
Primero, haga una configuración de WordPress y haga que sea multisitio. No importa dónde viva realmente, porque vamos a cambiar todo eso. Para simplificar, lo pondría en blog.stackexchange.com y lo convertiría en un sitio de tipo subdirectorio (son más fáciles). Los subdirectorios creados probablemente serían las babosas. / wordpress, / apple, / lo que sea.
Entonces, sí, para empezar, lo está haciendo en vivo en blog.stackexchange.com/wordpress. Considere este su entorno de ensayo. Cuando crea cada sitio, puede hacer cosas aquí hasta que decida activar el mapeo.
Para hacer el mapeo de dominio usted mismo, sin el complemento, haría algo como esto:
Paso uno: agregue define( 'SUNRISE', 'on' );
a la parte superior de su archivo wp-config.php.
Paso dos: crea un archivo sunrise.php en el directorio wp-content. Poner <?php
en la parte superior para empezar.
Paso tres: En el archivo sunrise.php será tu lógica para determinar qué sitio cargar.
Vas a basar esto en la $_SERVER[ 'HTTP_HOST' ]
variable. Cómo hacerlo exactamente es fácil: como quiera 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.
Como está usando la misma babosa aquí que el "subdirectorio", no necesita una tabla separada. Puede buscar en la tabla principal de 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 $ 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 predefine las variables globales $ current_blog y $ current_site en lugar de dejar que las funciones MU de WordPress lo hagan.
Esto sería suficiente para poner el sitio en funcionamiento (después de hacer que su DNS lo señale y ordenar las cosas del alojamiento virtual), sin embargo, la mayoría de las URL estáticas utilizadas en el código HTML todavía apuntarían a blog.stackexchange.com / wordpress, ya que ahí es donde realmente estaría el sitio. Además, la función de URL canónica probablemente no le guste y también lo redirigirá a usted.
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 cubrir la mayoría de los casos de las URL que se están ajustando.
Finalmente, querrás configurar el 'COOKIE_DOMAIN'. Como es probable que desee que los inicios de sesión se compartan en todo el proceso, puede configurarlo en stackexchange.com, o incluso más si no desea que se compartan inicios de sesión.
Si desea hablar sobre la integración del sistema normal de inicio de sesión de stackexchange 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 obtener más ayuda con esto. Me alegro de ayudar: otto en wordpress.org.