Vous pouvez le faire avec un fichier sunrise.php personnalisé. C'est essentiellement le fonctionnement du plugin de mappage de domaine, mais il met un joli front-end dessus. Pour quelque chose de personnalisé, vous pouvez écrire du PHP simple pour faire essentiellement la même chose.
L'essence du multisite consiste à déterminer le site à desservir. Le plug-in de mappage de domaine le fait en créant une table wp_domain_mapping et en y stockant les informations. Ainsi, lorsqu'il reçoit une demande pour xxx.com, il regarde dans ce tableau et voit que cela correspond à blog_id 123.
Tout d'abord, faites une configuration WordPress et rendez-la multisite. Peu importe où il vit vraiment, car nous allons changer tout cela. Pour plus de simplicité, je le mettrais sur blog.stackexchange.com et en ferais un site de type sous-répertoire (ceux-ci sont plus faciles). Les sous-répertoires créés seraient probablement les limaces. / wordpress, / apple, / quoi que ce soit.
Alors oui, pour commencer, vous le rendez en direct sur blog.stackexchange.com/wordpress. Considérez ceci comme votre environnement de mise en scène. Lorsque vous créez chaque site, vous pouvez y faire des choses jusqu'à ce que vous décidiez d'activer le mappage.
Pour faire le mappage de domaine vous-même, sans le plugin, vous feriez quelque chose comme ceci:
Première étape: ajoutez define( 'SUNRISE', 'on' );
en haut de votre fichier wp-config.php.
Deuxième étape: créez un fichier sunrise.php dans le répertoire wp-content. Mettez <?php
en haut pour commencer.
Troisième étape: dans le fichier sunrise.php, votre logique déterminera le site à charger.
Vous allez baser cela sur la $_SERVER[ 'HTTP_HOST' ]
variable. La façon exacte de procéder est simple: quelle que soit la manière dont vous le souhaitez. Si vous souhaitez simplement écrire une expression régulière à rechercher '/blog\.(.*)\.stackexchange\.com/'
, puis rechercher ce bit dans la base de données, vous pouvez le faire.
Puisque vous utilisez le même slug ici que le "sous-répertoire", vous n'avez pas besoin d'une table séparée. Vous pouvez simplement regarder dans le tableau principal wp_blogs pour trouver le site dont vous avez besoin. Quelque chose de similaire à ceci:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );
Une fois que vous avez le $ current_blog, vous avez besoin du code suivant:
$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;
Cela prédéfinit les variables globales $ current_blog et $ current_site au lieu de laisser les fonctions MU de WordPress le faire.
Cela suffirait à faire fonctionner le site (après avoir fait pointer votre DNS vers lui et avoir trié les éléments d'hébergement virtuel), cependant la plupart des URL statiques utilisées dans le code HTML pointeraient toujours vers blog.stackexchange.com / wordpress, car c'est là que le site serait vraiment. De plus, la fonction d'URL canonique n'aimerait probablement pas l'URL et vous redirigerait également.
Pour remédier à ces problèmes, vous souhaiterez probablement également prédéfinir plusieurs URL associées au site. Des choses comme WP_SITEURL et WP_HOME. En outre, WP_CONTENT_URL, WP_PLUGIN_URL et WPMU_PLUGIN_URL. Cela devrait couvrir la plupart des cas des URL en cours d'ajustement.
Enfin, vous souhaiterez définir le «COOKIE_DOMAIN». Étant donné que vous souhaitez probablement que les connexions soient partagées sur l'ensemble de la chose, vous pouvez le définir sur stackexchange.com, ou même plus si vous ne souhaitez pas qu'elles soient partagées.
Si vous voulez parler de l'intégration du système de connexion stackexchange normal dans WordPress, je peux également répondre à des questions à ce sujet, mais ce serait un peu plus détaillé d'une réponse. :)
N'hésitez pas à m'envoyer un e-mail si vous souhaitez plus d'aide à ce sujet. Heureux d'aider: otto sur wordpress.org.