Howto: von Joomla 1.5.x zu WordPress 3.4

Um den Umstieg von Joomla auf WordPress zu meistern, gibt es verschiedene Varianten. Ich favorisierte einen kompletten Umzug von Artikeln, Kommentaren und auch den in Artikeln eingebundenen Bildern und Grafiken. Zuerst testete ich ein Joomla-Modul für den Export als XML. Dort gab es aber Probleme mit den Dateien der Mediathek und die Kommentare, welche ich unter Joomla mit jComments nutzte, konnten gar nicht exportiert werden. Eine funktionierende Lösung für alle auftretenden Probleme fand ich mit einem WordPress-Plugin.

Dazu muss natürlich erstmal WordPress installiert werden. Das ist keine Hexerei und wer dabei Probleme haben sollte, kann sich an die offizielle Dokumentation halten oder bei Google zahlreiche hilfreiche Treffer erhalten. Um das laufende Joomla nicht direkt abzuschießen, installierte ich WordPress einfach in einen Unterordner. Dieser taucht dann auch später nicht in der URL auf, wenn man ein paar Pfade richtig umbiegt. Genaueres später.

Die WordPress-Installation lässt man am besten erstmal unangetastet und fügt nur das „FG Joomla to WordPress„-Plugin hinzu. Dazu einfach den heruntergeladenen Ordner entpacken und ins Plugin-Verzeichnis von WordPress kopieren. Unter Plugins im Dashboard wird die Erweiterung dann aktiviert. Unter Werkzeuge -> Daten importieren geht es weiter. Dort wählt man den neuen Menüpunkt Joomla 1.5. Da die Installation noch frisch ist, schadet ein Klick auf „Empty WordPress content“ nicht, um eventuelle Beispielartikel loszuwerden. Unter URL wird die URL der Joomla-Seite eingetragen. Hier sollte man das „http://“ nicht vergessen. 😉 Darunter füllt man die Zugangsdaten zur Joomla-Datenbank ein. Wer sich nicht mehr erinnern kann, kann die Daten einfach in der configuration.php seiner alten Installation nachlesen. Der Haken bei „Import the text above the ‚read more‘ to the excerpt“ sollte entfernt werden, da sonst der erste Teil der Artikel, über dem „weiterlesen…“-Link, abgeschnitten wird. Den Haken bei „Import meta keywords as tags“ habe ich gesetzt, damit die Meta-Keywords gleich als Tags in WordPress übernommen werden. Die Zauberei wird dann mit einem Klick auf „Import content“ gestartet. Nachdem das geklappt hat, ist der größte Schritt getan und alle Beiträge und Media-Dateien sollten es nach WordPress geschafft haben. Abschließend wird noch „Modify internal links“ geklickt, um Links in den Artikeln auf andere eigene Artikel richtig umzuschreiben.

An dieser Stelle fehlen noch die alten Kommentare aus jComments. Dafür habe ich ein php-Script gefunden, das aber noch angepasst werden musste. Die gefundene Version ging davon aus, dass sich Joomla und WordPress eine Datenbank teilen. Das ist bei mir nicht der Fall.


<?php

//Joomla
$username = "xxx";
$password = "xxx";
$database = "xxx";

//WordPress
$wusername = "xxx";
$wpassword = "xxx";
$wdatabase = "xxx";

$jolink = mysql_connect('localhost', $username, $password);
mysql_select_db($database, $jolink) or die( "Unable to select joomladatabase");
mysql_set_charset('utf8', $jolink);

$wplink = mysql_connect('localhost', $wusername, $wpassword);
mysql_select_db($wdatabase, $wplink) or die( "Unable to select wpdatabase");
mysql_set_charset('utf8', $wplink);

$query = "SELECT DISTINCT object_id FROM jos_jcomments";
echo $query;
print "
";
$pids = mysql_query($query, $jolink);

if (!$pids) {
echo mysql_error();
}
$num = mysql_numrows($pids);
$i = 0;
while ($i < $num) {
$pid = mysql_result($pids, $i, "object_id");
$query = "SELECT created FROM jos_content WHERE id = " . $pid;
echo $query;
print "
";
$created = mysql_query($query, $jolink);
if (!$created) {
echo mysql_error();
}
$ct = mysql_result($created, 0, "created");
$query = "SELECT ID FROM wp_posts WHERE post_date = '" . $ct . "' AND post_type = 'post'";
echo $query;
print "
";
$wpids = mysql_query($query, $wplink);
if (!$wpids) {
echo mysql_error();
}
$wpid = mysql_result($wpids, 0, "ID");
$query = "SELECT * FROM jos_jcomments WHERE object_id = " . $pid;
echo $query;
print "
";
$comments = mysql_query($query, $jolink);
$comments_count = mysql_numrows($comments);
$j = 0;
while ($j < $comments_count) {
$author = mysql_result($comments, $j, "name");
$email = mysql_result($comments, $j, "email");
$url = mysql_result($comments, $j, "homepage");
$ip = mysql_result($comments, $j, "ip");
$cdate = mysql_result($comments, $j, "date");
$content = mysql_result($comments, $j, "comment");
$content = mysql_real_escape_string($content);

$query = "INSERT INTO wp_comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content) VALUES (" . $wpid . ", '" . $author . "', '" . $email . "', '" . $url . "', '" . $ip . "', '" . $cdate . "', '" . $date . "', '" . $content . "')";
echo $query;
print "
";
mysql_query($query, $wplink);
$j++;
}
$query = "UPDATE wp_posts SET comment_count = " . $comments_count . " WHERE ID = " . $wpid;
echo $query;
print "
";
mysql_query($query, $wplink);

$i++;
}
mysql_close();
?>

Das Script wird als irgendwas.php auf dem Webserver abgelegt und einmalig über den Browser aufgerufen. Vorher sollten natürlich noch die Zugangsdaten für beide Datenbanken eingetragen werden.

Das Übertragen der Kommentare funktionierte wunderbar. Danach gab es aber den Effekt, dass ein paar Kommentare doppelt vorhanden waren. Ob das am Script lag, kann ich leider nicht ausschließen. Wirklich schlimm fand ich es nicht, denn ein paar Kommentare zu löschen ist weniger schlimm, als keine Kommentare mehr zu haben.

Nachdem der Content jetzt umgezogen war, wollte ich natürlich die alten Links zu den Artikeln noch bedienen können. Schließlich zeigen alle alten Links erstmal ins Leere. Ich kopierte mir also erstmal alle Links auf die alten Joomla-Artikel. Nun war es an der Zeit, die URL da-fi.de auch auf die WordPress-Installation zeigen zu lassen. Um aufzuräumen wurden die Joomla-Ordner und -Dateien in einen Unterordner verschoben. Der nächste Schritt passiert in WordPress unter Einstellungen -> Allgemein. Dort wird unter „Seiten-Adresse“ die neue URL, also bspw. http://example.org eingetragen. Unter „WordPress Adresse“ muss die komplette URL mit Unterordner, also http://example.org/wordpress, aufgeführt sein. Jetzt müssen die index.php und (falls vorhanden) .htaccess aus dem WordPress-Ordner ins Hauptverzeichnis des Webservers verschoben werden. In der index.php findet sich die Zeile

require('./wp-blog-header.php');

Diese wird zu

require('./wordpress/wp-blog-header.php');

abgeändert. Ab sofort sollte die WordPress-Seite direkt über die Domain zu erreichen sein.

Das Umbiegen der alten Links auf die neuen Artikel funktioniert über Weiterleitungen (Redirects). Diese habe ich direkt in der .htaccess konfiguriert. Man benötigt dazu jeweils den alten und den neuen Link und setzt den Redirect in einer Zeile der Form:

Redirect permanent /index.php/geocaching/24-gcmapfilter http://da-fi.de/2012/02/gcmapfilter/

Dabei sah die alte URL so aus: http://da-fi.de/index.php/geocaching/24-gcmapfilter .

Damit sollte der komplette Umzug recht „schmerzfrei“ über die Bühne gegangen sein. 😉

Share on FacebookShare on Google+Tweet about this on TwitterPin on PinterestShare on LinkedInShare on RedditEmail this to someoneShare on StumbleUpon

2 Comments

  1. Thanks for the code. But now this code is not correct. You can edit it so that it began to work correctly for the current version of WordPress?

  2. Funktioniert nicht im Code Folgendes:
    1. Nicht arbeiten thread Kommentare
    2. Kommentare ausstehende bewegt sich in der veröffentlichten
    Wissen, wie korrigieren? Ich werde dankbar sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.