it-swarm.com.de

Einrichten eines WordPress-Netzwerks mit Domains der dritten Ebene

Ich habe versucht, eine WordPress-Netzwerkinstallation einzurichten. Alles verlief reibungslos, bis ich zu dem Punkt komme, an dem mein gewünschtes Domain-Layout nicht mehr gut passt.

Ich hätte gerne ein Layout wie folgt:

blog. *. stackexchange.com

so möchte ich beispielsweise mehrere Standorte in einem Netzwerk haben, die wie folgt aussehen:

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

Ich denke könnte dies mit einigen kreativen Umschreiberegeln und manuellen DNS-Eingriffen zum Laufen bringen, aber ich hätte lieber ein Setup, in dem ich die Erstellung von allem außer dem DNS an jemand anderen weitergeben kann (wir haben es bereits getan) einen Prozess zum automatischen Erstellen aller in DNS benötigten Unterdomänen)

Ausgehend von meinem Herumspielen und Lesen von WP wirklich möchte ich, dass die Sites die Domain der nächsten Ebene sind. In meinem obigen Beispiel möchte ich also, dass sich das Hauptblog WP bei stackexchange befindet .com und die Blogs des Netzwerks finden Sie unter wordpress.stackexchange.com.

Gibt es eine Möglichkeit, meinen gewünschten Effekt zu erzielen, oder sollte ich einfach den Weg zu blog.stackexchange.com/$site gehen?

11
Zypher

Sie können dafür das Domain Mapper Plugin verwenden. Nachteil ist, dass Sie jedes Subblog manuell konfigurieren müssten.

3
Wietse Venema

Sie können dies mit einer benutzerdefinierten sunrise.php-Datei tun. Dies ist im Wesentlichen die Funktionsweise des Domain-Mapping-Plugins, das jedoch ein hübsches Front-End darstellt. Für etwas Benutzerdefiniertes können Sie ein einfaches PHP schreiben, um im Grunde dasselbe zu tun.

Die Essenz von Multisite besteht darin, herauszufinden, welche Site bereitgestellt werden soll. Das Domain-Mapping-Plugin erstellt dazu eine wp_domain_mapping-Tabelle und speichert die Informationen dort. Wenn es also eine Anfrage für xxx.com erhält, sieht es in dieser Tabelle nach, dass dies der blog_id 123 entspricht.

Erstellen Sie zunächst ein WordPress-Setup und machen Sie es multisite. Es spielt keine Rolle, wo es wirklich lebt, denn wir werden das alles ändern. Der Einfachheit halber stelle ich es auf blog.stackexchange.com und mache es zu einer Site vom Typ Unterverzeichnis (das ist einfacher). Die erstellten Unterverzeichnisse wären wahrscheinlich die Schnecken./WordPress,/Apple,/was auch immer.

Also ja, zu Beginn machst du es tatsächlich unter blog.stackexchange.com/wordpress live. Betrachten Sie dies als Ihre Staging-Umgebung. Wenn Sie eine Site erstellen, können Sie diese hier bearbeiten, bis Sie die Zuordnung aktivieren.

Wenn Sie das Domain-Mapping ohne das Plugin selbst durchführen möchten, gehen Sie folgendermaßen vor:

Erster Schritt: Fügen Sie define( 'SUNRISE', 'on' ); am Anfang Ihrer wp-config.php-Datei hinzu.

Schritt zwei: Erstellen Sie eine sunrise.php-Datei im Verzeichnis wp-content. Setze <?php am Anfang oben ein.

Schritt drei: In der sunrise.php-Datei bestimmen Sie logischerweise, welche Site geladen werden soll.

Sie werden dies auf der Variablen $_SERVER[ 'HTTP_Host' ] basieren. Wie Sie das genau machen, ist einfach: Wie auch immer Sie es wollen. Wenn Sie nur einen regulären Ausdruck schreiben möchten, um nach '/blog\.(.*)\.stackexchange\.com/' zu suchen, und dann nach diesem Bit in der Datenbank suchen möchten, können Sie dies tun.

Da Sie hier denselben Slug wie im "Unterverzeichnis" verwenden, benötigen Sie keine separate Tabelle. Sie können einfach in der Haupttabelle wp_blogs nachsehen, um die gewünschte Site zu finden. Ähnliches:

$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );

Sobald Sie das $ current_blog haben, benötigen Sie den folgenden Code:

$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;

Dadurch werden die globalen Variablen $ current_blog und $ current_site vordefiniert, anstatt die MU-Funktionen von WordPress ausführen zu lassen.

Dies würde ausreichen, um die Site zum Laufen zu bringen (nachdem Ihr DNS darauf hingewiesen und das virtuelle Hosting-Material sortiert wurde), aber die meisten statischen URLs, die im HTML-Code verwendet werden, würden immer noch auf blog.stackexchange.com verweisen/wordpress, da dort die Seite wirklich wäre. Außerdem würde die Canonical URL-Funktion die URL wahrscheinlich nicht mögen und Sie auch umleiten.

Um diese Probleme zu beheben, möchten Sie wahrscheinlich auch mehrere der mit der Site verknüpften URLs vordefinieren. Dinge wie WP_SITEURL und WP_HOME. Außerdem WP_CONTENT_URL, WP_PLUGIN_URL und WPMU_PLUGIN_URL. Dies sollte die meisten Fälle abdecken, in denen URLs angepasst werden.

Als letztes möchten Sie das 'COOKIE_DOMAIN' setzen. Da Sie wahrscheinlich möchten, dass Anmeldungen für die gesamte Sache freigegeben werden, können Sie sie auf stackexchange.com oder höher einstellen, wenn Sie nicht möchten, dass Anmeldungen freigegeben werden.

Wenn Sie über die Integration des normalen StackExchange-Anmeldesystems in WordPress sprechen möchten, kann ich auch Fragen dazu beantworten, aber es wäre ein bisschen detaillierter als eine Antwort. :)

Sie können mich gerne per E-Mail kontaktieren, wenn Sie weitere Hilfe benötigen. Freut mich zu helfen: otto bei wordpress.org.

1
Otto