web-dev-qa-db-fra.com

Mise en place d'un réseau wordpress avec des domaines de troisième niveau

J'ai étudié la possibilité de configurer une installation réseau WordPress. Tout s'est bien passé jusqu'à ce que le projet de domaine souhaité ne me corresponde plus.

Je voudrais avoir une mise en page comme suit:

blog. *. stackexchange.com

ainsi, par exemple, je voudrais avoir plusieurs sites dans un réseau qui ressemblent à:

blog.wordpress.stackexchange.com
blog.Apple.stackexchange.com
blog. $ site.stackexchange.com

Je pense je pourrais faire en sorte que cela fonctionne avec des règles de réécriture créatives et une intervention manuelle du DNS, mais je préférerais une configuration permettant de confier la création de tout, sauf du DNS, à quelqu'un d'autre un processus pour créer automatiquement tous les sous-domaines nécessaires dans DNS)

En jouant et en lisant WP vraiment , je veux que les sites soient le domaine de niveau suivant. Dans mon exemple, il souhaite que le blog principal WP soit sur stackexchange. .com et les blogs du réseau sur wordpress.stackexchange.com.

Existe-t-il un moyen d’obtenir l’effet souhaité ou devrais-je simplement suivre blog.stackexchange.com/$site?

11
Zypher

Vous pouvez utiliser le Domain Mapper plugin pour cela. L'inconvénient est que vous auriez configuré manuellement chaque sous-blog.

3
Wietse Venema

Vous pouvez le faire avec un fichier sunrise.php personnalisé. C’est essentiellement ainsi que fonctionne le plug-in de mappage de domaine, mais il constitue un joli frontal. Pour quelque chose de personnalisé, vous pouvez écrire quelques PHP simples pour faire la même chose.

L'essence du multisite consiste à déterminer le site à desservir. Pour ce faire, le plug-in de mappage de domaine crée une table wp_domain_mapping et stocke les informations. Ainsi, lorsqu'il reçoit une demande pour xxx.com, il recherche dans cette table et voit que cela correspond à blog_id 123.

Commencez par configurer WordPress et créez plusieurs sites. 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,/peu importe.

Alors oui, pour commencer, vous le diffusez en direct sur blog.stackexchange.com/wordpress. Considérez ceci comme votre environnement de transfert. Lorsque vous créez chaque site, vous pouvez y modifier des éléments 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 vous permettra de déterminer le site à charger.

Vous allez baser ceci sur la variable $_SERVER[ 'HTTP_Host' ]. Comment faire cela, c'est facile: vous voulez le faire. Si vous voulez simplement écrire une regex pour 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 la table principale wp_blogs pour trouver le site dont vous avez besoin. Quelque chose de semblable à 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 pour que le site soit opérationnel (après que votre DNS y ait pointé et que le contenu de l'hébergement virtuel soit réglé), cependant, la plupart des URL statiques utilisées dans le code HTML renverraient toujours à blog.stackexchange.com./wordpress, puisque c’est là que le site serait vraiment. En outre, la fonction d’URL canonique n’est probablement pas adaptée à l’URL et vous redirige également.

Pour remédier à ces problèmes, vous voudrez probablement également prédéfinir plusieurs des URL associées au site. Des choses comme WP_SITEURL et WP_HOME. De plus, WP_CONTENT_URL, WP_PLUGIN_URL et WPMU_PLUGIN_URL. Cela devrait couvrir la plupart des cas d'ajustement des URL.

Enfin, vous voudrez définir "COOKIE_DOMAIN". Étant donné que vous souhaitez probablement que les connexions soient partagées avec l'ensemble du composant, vous pouvez le définir sur stackexchange.com, voire davantage si vous ne souhaitez pas que ces connexions soient partagées.

Si vous souhaitez parler de l'intégration du système de connexion stackexchange normal dans WordPress, je peux répondre à vos questions à ce sujet également, mais ce serait un peu plus détaillé. :)

N'hésitez pas à m'envoyer un email si vous voulez plus d'aide avec cela. Heureux d'aider: otto à wordpress.org.

1
Otto