Das WordPress Multisite-Feature ist kacke!

Ich habe es wirklich versucht! Mehrfach sogar! Ich wollte mich wirklich mit dem Multisite-Feature von WordPress anfreunden, das seit der Version 3.0 durch die Integration der Multiuser-Edition verfügbar ist. Aber es klappt einfach nicht!

Ich habe ehrlich gesagt keine Ahnung, welcher Frickler da am Werk war, um dieses - eigentlich recht praktische - Feature dermaßen zu versauen! Dabei ist der Grundgedanke doch eigentlich recht praktisch: Mit einer WordPress-Installation will man mehrere Blogs - mit jeweils eigenem Inhalt - bereitstellen. Das ganze soll durch eine Userverwaltung untermauert werden, sodass jede User - potentiell - Zugriff auf mehrere Blogs der gleichen Installation hat.

MultiSite Superadmin

Aber wie sieht das Ergebnis aus? Das Einrichten ist noch ziemlich einfach: Eine Konfiguration, um das "Netzwerk" erzeugen zu können. Dann alles nochmal umkonfigurieren, um das Netzwerk nutzbar zu machen. Dann kann man neue Unterseiten anlegen und User berechtigen, auf Blog A, B und C zuzugreifen.
Doch zu welchem Preis? Das fängt schonmal damit an, dass man WordPress nicht mehr in einen Unterordner installieren darf - warum auch immer das nicht unterstützt wird. Dann verschwinden urplötzlich Einstellungsmöglichkeiten, die unter Garantie nichts, aber auch wirklich garnichts mit dem Multisite-Feature zu tun haben...

Leseeinstellungen vorher vs. nachher

...um die verschwundenen Einstellungen tätigen zu können, muss man die mehr als lächerliche Superadmin-Blog-Konfigurationsmöglichkeit benutzen, in der man die Werte händisch ändern darf...

Superadmin Blog-Optionen

...und zur Krönung des ganzen darf man dann auch noch irgendwelche Drittkomponenten einsetzen, um den Blogs auch jeweils eigene Domains zuweisen zu können (wobei das Plugin bei mir einfach nur zu einer Endlosschleife führt und den Login kaputt macht).

Ich für meinen Teil werde dieses völlig verbastelte Feature jedenfalls nicht nutzen. Wenn man nicht gerade Blogs für irgendwelche Fremden Leute bereitstellen muss, gibt es sicherlich bessere Wege, um eine akzeptable Alternative zu erreichen. Zwei Beispiele für solche Alternativen möchte ich euch zeigen. Die sind zwar weniger bequem (was die geteilte User-Verwaltung angeht), aber sie ermöglichen genau das, was ein normaler Bloguser wahrscheinlich will:

  • mehrere Blogs betreiben können
  • jedem Blog eine eigene Domain geben können
  • nur eine WordPress-Installation pflegen müssen

Die Lösungen selbst ähneln denen, die WordPress.org selber vorschlägt, nur, dass das ganze mit einer einzigen Codebasis funktioniert. Die erste Lösung ist für Leute geeignet, die nur eine Datenbank zur Verfügung haben, aber trotzdem mehrere WordPress-Blogs parallel nutzen wollen:
In der Datei wp-config.php gibt es die Variable $table_prefix. Durch Ändern dieser Variable kann man zwischen verschiedenen WordPress-Instanzen hin- und herschalten. Wenn man nun also für verschiedene Domains verschiedene WordPress-Instanzen (aber mit der gleichen Codebase) haben will, muss man diesen Prefix einfach nur vom Host abhängig machen:

1
$table_prefix  = 'wp_' + strtolower(ereg_replace("[^A-Za-z]", "", $_SERVER["HTTP_HOST"])) + "_";

Hier gibt es jedoch einen Schönheitsfehler: Sollte jemand mit einer bisher unbekannten Domain die Blog-Installation aufrufen können, hat dieser die Möglichkeit, einen eigenen Blog zu installieren! Um das zu verhindern, sollte man entweder eine Abfrage einbauen, ob der Host zu einer Liste von Hosts gehört, zu denen der Blog bereits existiert, oder man macht die Datei wp-admin/install.php unzugänglich.

Leute, die beliebig viele Datenbanken anlegen können, können auch einen anderen Weg gehen - diesen werde ich persönlich wahrscheinlich nutzen. Was man einfach macht: Man verwendet einen Datenbank-Namen und (optional) einen Nutzernamen und ein Passwort, die sich vom Host ableiten lassen. Der Vorteil ist, dass das Installationsproblem bei inkorrekten Hosts wegfällt.

1
2
3
4
5
6
7
8
9
10
$clearedHost  = strtolower(ereg_replace("[^A-Za-z]", "", $_SERVER["HTTP_HOST"]));
$generatedPwd = ereg_replace("[^A-Za-z0-9]", "", base64_encode(pack("H*" , sha1("SALT" . $clearedHost))));

// ** MySQL settings - You can get this info from your web host ** //
define('DB_NAME',     'DBNAME_' . $clearedHost);
define('DB_USER',     'USERNAME_' . $clearedHost);
define('DB_PASSWORD', $generatedPwd);
define('DB_HOST',     'DBSERVER');
define('DB_CHARSET',  'utf8');
define('DB_COLLATE',  '');

In diesem Beispiel sollte man die Platzhalter "SALT", "DBNAME", "USERNAME" und "DBSERVER" durch seine eigenen Daten ersetzen. "SALT" dient übrigens dazu, damit außenstehende nicht anhand der Domain auf das Datenbank-Passwort schließen können. ;-)

Ich hoffe, ich konnte euch ein paar neue Einblicke verschaffen und wünsche euch viel Spaß mit eurer WordPress-Installation! :D

Und nicht vergessen: Ich hafte nicht für Schäden an Software, Hardware oder für Vermögensschäden, die durch Anwendung dieser Änderungen entstanden sind oder entstehen könnten. ;-)
Multiple Grüße, Kenny