Seite auswählen

Vor ca. 1,5 Jahren habe ich mich entschieden mit meinem privaten Blog den Wechsel von WordPress auf Drupal zu wagen. Dabei habe ich wertvolle Erfahrungen gesammelt – aber nun möchte ich die bestehenden Inhalte in diesen WordPress MU Blog importieren (die Schritte sollten für Nutzer des ’normalen‘ WordPress weitgehend identisch sein). Schon die Migration zu Drupal war damals kein leichter Weg.

Soweit ich es im Moment überblicke wird auch die Rückkehr keine einfache Sache werden. Es gibt zwar glücklicherweise eine Anleitung inkl. Skript von Mike Smullin für die Migration von Drupal 5.x nach WordPress 2.7, die auf dem Artikel „How to migrate from Drupal 5 to WordPress 2“ von D’Arcy Norman aus dem Jahr 2007 beruht und die Änderungen von WordPress 2.5 zu 2.7 berücksichtigt. Allerdings läuft hier eine WordPress MU Installation. Ich muss mich erstmal schlau machen in wie weit die Migration von WordPress zu WordPress MU problematisch sein könnte.

Die Schritte

1. Erstmal benötige ich einen lokalen Server. Dabei greife ich auf die Mac Version von Apache Friends Xampp zurück, die ich früher bereits in der Windows Version für solche Zwecke genutzt habe.

2. Ich installiere auf meinem lokalen Server WordPress sicherheitshalber in der älteren Version 2.7, damit ich die gleiche Version wie in der Anleitung verwende. Als Datenbankname verwende ich „wordpress“. Dann sichere ich mit Hilfe des MySQLDumpers die Drupal Datenbank und spiele diese in den lokalen MySQL Server ein und benenne die Datenbank in „drupal“ um. Für die Migration der Inhalte wird keine extra Installation von Drupal benötigt!

3. Anschließend lasse ich im phpMyAdmin das von Mike Smullin zur Verfügung gestellte Script laufen. Hier traten dann einige Hürden zutage, die für mich ohne Kenntnis der SQL Syntax nicht so einfach zu meistern waren.

Hindernisse umschiffen: Taxonomie vs Kategorien und Tags

Drupal besitzt keine Kategorien und Tags, sondern bietet ein eigentlich viel mächtigeres Taxonomiesystem. Damit lassen sich auch Kategorien und Tags konfigurieren, die das Script aber nicht differenziert. Falls man also mehrere Vokabulare in Drupal angelegt hat, wird alles als Kategorie in WordPress übertragen. Dadurch kam es zu Problemen, weil einige Begriffe bei mir sowohl als Kategorie als auch als Tag existierten. So wurde versucht zweimal die gleiche Kategorie anzulegen was zu einem Abbruch mit der Fehlermeldung „Duplicate entry“ führte.

Erst löschte ich einfach die entsprechenden Dubletten aus der Drupal Datenbank. Aber damit kam dann die Zuordnung zu den Beiträgen durcheinander. Dann versuchte ich etwas tiefer in das Script und den Aufbau der WordPress und Drupal Tabellen einzutauchen. Aber für einen „professionellen Laien“ wie mich ist die nötige Investition an Zeit und Gehirnschmalz dann doch zu hoch.

Letztendlich kam ich auf eine einfache für mich handhabbare Lösung: In der „term_data“ Tabelle in der Drupal Datenbank sind die Terms (Begriffe) aufgelistet und jedes Vokabular hat einen eigenen „vid“ Wert. Da die Anzahl meiner Kategorien im Vergleich zu den Tags sehr gering war, war es auch kein Problem im phpMyAdmin die Kategorien umzubenennen. Ich habe die Tabelle nach der „vid“ Spalte sortieren lassen und z.B. die Kategorie „CMS“ habe ich in „1_CMS“ umbenannt. So gab es keine Begriffsdoubletten mehr. Allerdings wurden so alle meine Tags als Kategorien importiert.

Kategorien in Tags wandeln

Nach dem Import findet sich in WordPress glücklicherweise unter Tools > Import der „Categories and Tags Converter“ mit dessen Hilfe ich dann recht schnell die nahezu 300 Kategorien, die eigentlich Tags sein sollten, umwandeln konnte. Die Kategorien habe ich dann in WordPress wieder umbenannt („1_CMS“ –> „CMS“)

Skript in der richtigen Datenbank ausführen!

Als das Problem gelöst war, kam es zu einer Fehlermeldung, weil eine WordPress Tabelle in der Drupal Datenbank gesucht wurde. Ich hatte vorher gar nicht gewußt, dass es einen Unterschied ausmacht, ob ich das Script im SQL Bereich der Drupal Datenbank laufen lasse oder im SQL Bereich der WordPress Datenbank. Als ich letzteres probierte lief das Script fehlerlos durch.

Korrekte Kennzeichnung der Artikel in der Datenbank

Allerdings wurden mir in der lokalen WordPress Installation nur alle Kategorien (sogar mit der Anzeige der darin enthaltenen Beitragszahl) angezeigt, aber die eigentlichen Beiträge waren nicht zu finden. Nur die Angelegten Seiten waren auch in der WordPress Datenbank gelandet.

Ich hatte bereits die Vermutung, dass dies mit den verschiedenen Contentarten von Drupal zusammenhängen könnte. Während es in WordPress nur Artikel oder Seiten gibt, lassen sich in Drupal verschiedene „nodes“ definieren und auch als Blogartikel nutzen. Sollte das nicht zu der Datanbankabfrage passen landen die Artikel nicht in der WordPress Datenbank bzw. sind diese nicht als Artikel deklariert. Glücklicherweise hat jemand einen Kommentar unter dem How to Artikel hinterlassen mit einer Lösung für dieses Problem.

Nachdem ich die entsprechenden Stellen aus dem Kommentar kopiert hatte, bereiteten „falsche“ Anführungsstriche erstmal Probleme, bis ich darauf kam diese anzupassen. Deshalb stelle ich mein angepasstes Skrip auch als Download zur Verfügung, um solche Unwägbarkeiten zu vermeiden.

Kleinere Änderungen

Nun habe fand ich meine Artikel in der lokalen WordPress Installation wieder. Da Drupal ein anderen more Tag als WordPress benutzt, musste dieser noch vom alten ‚break‘ ins wordpressgemäße ‚more‘ geändert werden. Dies habe ich dann auch gleich in der Datenbank mit hilfe von Jowras schönder Anleitung „Suchen und Ersetzen in MySQL-Datenbanken“ gelöst (der auch sehr schön hilft, falls man die Links in den Blogartikeln anpassen muss).

Erstaunlicherweise entdeckte ich dann, dass die vorher angezeigten Kommentare in die Moderation gelegt und die vorher als zu moderieren gekennzeichneten Kommentare angezeigt wurden. Ich habe es geschafft mit einer simplen selbstgestrickten Sequenz die Kennzeichnungen umzukehren. Sicherlich nicht schön gemacht, aber es funktioniert.

Nach dem Durchlauf des Skripts habe ich nun meine Artikel, Kategorien, Tags und die Kommentare in der WordPress Datenbank.

Anschließend habe ich noch ein paar Suchen und Ersetzten Aktionen nach Jowras Artikel durchgeführt, um Links innerhalb des Blogs und die Verlinkung auf die Bilder auf die neue Adresse umzubiegen.

Export -> Import

Zu Guter letzt habe ich dann über Werkzeuge (Tools) > Export eine XML Datei aus der lokalen WordPress Installation exportiert und einfach in meinen neuen WPMU Blog importiert. Das sollte mit einem ’normalen WordPress genauso gut gehen. Hilfsweise könnte man vorher noch die lokale Installation auf die aktuelle WordPress Version updaten (z.Zt. als ich diesen Artikel schrieb war die aktuelle Version die 2.8).

WPMU Spezifisches

Falls man wie ich WPMU nutzen will, ist zu beachten, dass der Ordner für die Bilder dort ‚files‘ heißt und nicht mehr ‚upload‘. Außerdem ist die per FTP-Client sichtbare Struktur anders als die nach außen hi
n sichtbaren Links, da WPMU ja erlaubt mehrere Blogs zu betreiben. Intern findet sich im Ordner ‚wp-content‘ ein Unterordner namens ‚blogs.dir‘ (wird erst angelegt, wenn man etwas hochlädt!!!) in dem für jeden Blog ein nummeriertes Verzeichnis erstellt wird (z.B. ‚1‘), in dem dann der Ordner ‚files‘ liegt. Der Teil des Verzeichnispfades ‚/blog.dir/1/‘ ist für Besucher des jeweiligen WPMU Blogs nicht ’sichtbar‘.

Ich will auch nicht verschweigen, dass ich hier einige Probleme hatte. WPMU konnte zunächst keine eigenen Verzeichnisse anlegen, was damit zusammenhing, dass die automatisch angelegten Verzeichnisse einen anderen Owner hatten als die von mir per FTP angelegten. Wer genaueres wissen will, muss sich an Frank Helmschrott wenden, der durch die Umstellung auf dem Server von „php via Apache modul auf php via fast-cgi“ das Problem löste. Das ist wohl leider etwas, was normalen Hostingkunden nicht ohne weiteres möglich sein wird.

Fazit

Es ging doch besser als ich befürchtet hatte. Vielleicht sind meine Erfahrungen und das von mir etwas modifizierte Skript dem einen oder anderen hilfreich.

Download:
Das von mir angepasste SQL Skript für Drupal 5.x zu WordPress 2.7 Migration (Original findet sich bei Mike Smullin)

Links:
Migrate/Convert/Import Drupal 5.x to WordPress 2.7 von Mike Smullin
Apache Friends Xampp
Suchen und Ersetzen in MySQL-Datenbanken