Você pode fazer isso com um arquivo sunrise.php personalizado. É essencialmente assim que o plug-in de mapeamento de domínio funciona, no entanto, coloca um front-end bastante interessante. Para algo personalizado, você pode escrever um PHP simples para fazer basicamente a mesma coisa.
A essência do multisite envolve descobrir em qual site servir. O plug-in de mapeamento de domínio faz isso criando uma tabela wp_domain_mapping e armazenando as informações nela. Assim, quando recebe uma solicitação para xxx.com, ele olha nessa tabela e vê que isso corresponde ao blog_id 123.
Primeiro, faça uma configuração do WordPress e faça vários sites. Não importa onde realmente mora, porque vamos mudar tudo isso. Para simplificar, eu o colocaria em blog.stackexchange.com e o tornaria um site do tipo subdiretório (esses são mais fáceis). Os subdiretórios criados provavelmente seriam as lesmas. / wordpress, / apple, / o que for.
Então, sim, para começar, você está realmente divulgando o blog em blog.stackexchange.com/wordpress. Considere este o seu ambiente de preparação. Ao criar cada site, você pode fazer algumas coisas aqui até decidir ativar o mapeamento.
Para fazer o mapeamento de domínio, sem o plug-in, você faria algo assim:
Etapa 1: adicione define( 'SUNRISE', 'on' );
na parte superior do seu arquivo wp-config.php.
Etapa 2: crie um arquivo sunrise.php no diretório wp-content. Coloque <?php
no topo para começar.
Etapa três: No arquivo sunrise.php, será a sua lógica para determinar qual site carregar.
Você vai basear isso na $_SERVER[ 'HTTP_HOST' ]
variável. Como você faz isso exatamente é fácil: como quiser. Se você quiser apenas escrever um regex para procurar '/blog\.(.*)\.stackexchange\.com/'
e depois procurar esse bit no banco de dados, faça isso.
Como você está usando a mesma lesma aqui do "subdiretório", não precisa de uma tabela separada. Você pode apenas olhar na tabela principal wp_blogs para encontrar o site que precisa. Algo semelhante a isso:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );
Depois de ter o $ current_blog, você precisará do seguinte 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;
Isso pré-define as variáveis globais $ current_blog e $ current_site em vez de permitir que as funções MU do WordPress o façam.
Isso seria suficiente para colocar o site em funcionamento (depois de fazer com que o DNS apontasse para ele e resolvesse o material da hospedagem virtual), no entanto, a maioria das URLs estáticas usadas no código HTML ainda apontaria para blog.stackexchange.com / wordpress, já que é onde o site realmente estaria. Além disso, a função URL canônica provavelmente não gostaria da URL e também o redirecionaria.
Para solucionar esses problemas, é provável que você também queira predefinir vários dos URLs associados ao site. Coisas como WP_SITEURL e WP_HOME. Além disso, WP_CONTENT_URL, WP_PLUGIN_URL e WPMU_PLUGIN_URL. Isso deve cobrir a maioria dos casos dos URLs que estão sendo ajustados.
Por fim, você deseja definir o 'COOKIE_DOMAIN'. Como você provavelmente deseja que os logons sejam compartilhados por toda a coisa, você pode configurá-lo para stackexchange.com, ou ainda mais, se não desejar que eles sejam compartilhados.
Se você quiser falar sobre a integração do sistema de login stackexchange normal no WordPress, também posso responder perguntas sobre isso, mas seria uma resposta um pouco mais detalhada. :)
Sinta-se à vontade para me enviar um e-mail se quiser mais ajuda com isso. Fico feliz em ajudar: otto no wordpress.org.