Puoi farlo con un file sunrise.php personalizzato. Questo è essenzialmente il modo in cui funziona il plug-in di mappatura del dominio, tuttavia mette un bel front end su di esso. Per qualcosa di personalizzato, puoi scrivere un semplice PHP per fare sostanzialmente la stessa cosa.
L'essenza del multisito consiste nel capire quale sito servire. Il plugin di mappatura del dominio lo fa creando una tabella wp_domain_mapping e memorizzando le informazioni al suo interno. Pertanto, quando riceve una richiesta per xxx.com, appare in quella tabella e vede che corrisponde a blog_id 123.
Innanzitutto, esegui una configurazione di WordPress e rendila multisito. Non importa dove vive davvero, perché cambieremo tutto questo. Per semplicità, lo metterei su blog.stackexchange.com e lo trasformerei in un sito di tipo sottodirectory (quelli sono più facili). Le sottodirectory create sarebbero probabilmente le lumache. / wordpress, / apple, / qualunque cosa.
Quindi sì, per cominciare, lo stai davvero facendo vivere su blog.stackexchange.com/wordpress. Considera questo il tuo ambiente di stadiazione. Quando crei ciascun sito, puoi fare cose qui fino a quando non decidi di attivare la mappatura.
Per eseguire la mappatura del dominio da soli, senza il plug-in, dovresti fare qualcosa del genere:
Passo 1: aggiungi define( 'SUNRISE', 'on' );
all'inizio del tuo file wp-config.php.
Passaggio 2: creare un file sunrise.php nella directory wp-content. Metti <?php
in cima per iniziare.
Fase tre: nel file sunrise.php sarà la tua logica per determinare quale sito caricare.
Baserai questo sulla $_SERVER[ 'HTTP_HOST' ]
variabile. Come lo fai esattamente è facile: comunque lo vuoi fare. Se vuoi semplicemente scrivere una regex da cercare '/blog\.(.*)\.stackexchange\.com/'
e poi cercare quel bit nel database, puoi farlo.
Dato che stai usando la stessa lumaca qui come "sottodirectory", non hai bisogno di una tabella separata. Puoi semplicemente guardare nella tabella principale di wp_blogs per trovare il sito di cui hai bisogno. Qualcosa di simile a questo:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );
Una volta che hai $ current_blog, allora hai bisogno del seguente codice:
$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;
Questo pre-definisce le variabili globali $ current_blog e $ current_site invece di lasciare che le funzioni MU di WordPress lo facciano.
Questo sarebbe sufficiente per far funzionare il sito (dopo aver ottenuto il tuo DNS per puntarlo ad esso e aver risolto i contenuti dell'hosting virtuale), tuttavia la maggior parte degli URL statici utilizzati nel codice HTML rimarrebbe comunque su blog.stackexchange.com / wordpress, poiché è lì che sarebbe davvero il sito. Inoltre, la funzione URL canonico probabilmente non gradirebbe l'URL e reindirizzerebbe anche te.
Per ovviare a questi problemi, è probabile che tu voglia pre-definire diversi degli URL associati al sito. Cose come WP_SITEURL e WP_HOME. Inoltre, WP_CONTENT_URL, WP_PLUGIN_URL e WPMU_PLUGIN_URL. Ciò dovrebbe coprire la maggior parte dei casi di modifica degli URL.
Infine, ti consigliamo di impostare "COOKIE_DOMAIN". Dal momento che probabilmente desideri che gli accessi vengano condivisi su tutto il contenuto, puoi impostarlo su stackexchange.com o anche su un livello superiore se non desideri che vengano condivisi.
Se vuoi parlare dell'integrazione del normale sistema di login stackexchange in WordPress, posso rispondere anche a queste domande, ma sarebbe un po 'più dettagliato di una risposta. :)
Sentitevi liberi di inviarmi un'e-mail se volete più aiuto con questo. Sono contento di aiutare: otto su wordpress.org.