Configuration d'un réseau wordpress avec des domaines de troisième niveau

10

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.

J'aimerais avoir une mise en page comme suit:

blog. *. stackexchange.com

donc, par exemple, j'aimerais avoir plusieurs sites dans un réseau qui ressemblent à:

blog.wordpress.stackexchange.com
blog.apple.stackexchange.com
blog. $ site.stackexchange.com

Je pense que cela pourrait fonctionner avec des règles de réécriture créatives et une intervention manuelle du DNS, mais je préférerais disposer d'une configuration permettant de transférer la création de tout, à l'exception du DNS. quelqu'un d'autre (nous avons déjà un processus pour créer automatiquement tous les sous-domaines nécessaires dans le DNS)

Pour pouvoir jouer et lire WP, vraiment souhaite que les sites soient le domaine de niveau suivant, de sorte que dans l'exemple ci-dessus, il souhaite que le blog principal de WP soit sur stackexchange.com et les blogs du réseau. être à wordpress.stackexchange.com.

Existe-t-il un moyen quelconque d'obtenir l'effet souhaité ou dois-je simplement choisir blog.stackexchange.com/$site?

    
posée Zypher 18.03.2011 - 05:27

2 réponses

2

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

    
réponse donnée Wietse Venema 18.03.2011 - 08:03
1

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 un simple PHP pour faire fondamentalement 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 qu'il contient. Ainsi, lorsqu'il reçoit une demande pour xxx.com, il cherche 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. Placez <?php en haut pour commencer.

Troisième étape: Dans le fichier sunrise.php, votre logique sera utilisée pour déterminer le site à charger.

Vous allez vous baser sur la variable $_SERVER[ 'HTTP_HOST' ] . Comment faire cela est facile, peu importe la façon dont vous voulez le faire. Si vous voulez simplement écrire une expression rationnelle 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 blog $ 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;

Ceci 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 l’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 à un blog. stackexchange.com/wordpress, car 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 souhaiterez 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". Etant 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 une réponse un peu plus détaillée. :)

N'hésitez pas à m'envoyer un e-mail si vous souhaitez obtenir de l'aide supplémentaire. Heureux de vous aider: otto à wordpress.org.

    
réponse donnée Otto 29.07.2011 - 00:42

Lire d'autres questions sur les étiquettes