WoltLab Blog: WordPress importiert…

Ich habe eine relativ alte WordPressinstallation (2008) in den aktuellen WoltLab Blog importiert. Nachfolgend ein Bericht über den Import, vielleicht ist er ja für den ein oder anderen hilfreich.


Bevor man anfängt, sollte man sich im Klaren darüber sein, was man in WordPress importieren will. Handelt es sich lediglich um Artikel, dann kann man den Punkt 1 überspringen. Will man auch Seiten importieren, dann sollte man weiterlesen, es sei denn, man will mindestens ein Mal von vorne anfangen. Auf der anderen Seite schadet etwas Übung ja auch nicht.


Am besten macht man vor dem Import eine Kopie der WordPressdatenbank und verwendet diese für den Import, da man doch das ein oder andere modifizieren muss. Es ist übrigens grundsätzlich eine gute Idee, regelmäßig Datensicherungen zu machen und solche Dinge nicht an den Originaldaten auszuprobieren.


1. Seiten importieren


Wie ich natürlich erst nach dem ersten erfolgreichen Import festgestellt habe, importiert der Importer keine Seiten. Da ja bei WordPress eigentlich alle Inhalte in einer Tabelle landen wp_post, hat mich die Tatsache etwas kalt erwischt, denn ich bin eigentlich davon ausgegangen, dass alles aus dieser Tabelle importiert wird. Aber das ist nicht der Fall.


Lange Rede ohne Sinn, also was macht man denn nun mit den Seiten? In WordPress selbst scheint es keine Möglichkeit zu geben eine Seite in einen Artikel umzuwandeln, also mal eben schnell eine Suchmaschine gequält und folgendes Plugin gefunden:


pTypeConverter


https://wordpress.org/plugins/ptypeconverter/installation/


Nach der Installation ist es unter Werkzeuge zu finden und lässt einen per Klick alle gewünschten Seiten in Artikel konvertieren. Es ist zwar schon älter, aber es hat bei mir mit WordPress 4 ohne Probleme funktioniert, so dass ich an der Stelle, trotz des Alters, eine Empfehlung aussprechen kann.


2. Artikel importieren


Beim ersten Importversuch gab es dann gleich eine Fehlermeldung:

Code
  1. PHP: filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for /Applications/AMPPS/www/wordpress/wp-content/uploads/ /var/www/web0/html/blog/wp-content/uploads/2008/12/concept_bluezero_2.jpg

Der Pfad des Bildes ist ungültig. Nun galt es herauszufinden, warum und wie man das wieder ändern kann. Nach langem Suchen bin ich dann in der Tabelle wp_postmeta gelandet. Das ist etwas seltsam, aus zweierlei Gründen: zum einen wird der Pfad in WordPress selbst gar nicht verwendet, weder das verlinkte Bild verwendet intern diesen Pfad, noch ist er irgendwo in einem Quelltext zu finden; zum anderen ist dieser Pfad ein Uraltpfad, das müsste der Pfad der allerersten Serverinstallation sein. Im Laufe der Jahre ist meine WordPress-Installation auf mehrere Server umgezogen und funktioniert auch aktuell definitiv ohne Probleme.


Ein neu erstellter Testartikel zeigte, dass WordPress die Anhänge mittlerweile ohne absoluten Pfad speichert:


2008/12/concept_bluezero_2.jpg


anstatt


/var/www/web0/html/blog/wp-content/uploads/2008/12/concept_bluezero_2.jpg


also muss der absolute Pfad weg. Das lässt sich am schnellsten mit einer Datenbankabfrage bewerkstelligen:

SQL
  1. UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '/var/www/web0/html/blog/wp-content/uploads/', '')

Und schon lief der nächste Importversuch durch. Nach dem Import nicht vergessen die Anzeigen zu aktualisieren und die Standardkategorie zu löschen bzw. zu ändern.


Nun hat man mal erst alle Rohdaten im WolLab Blog und die eigentliche Arbeit fängt an.


Da WordPress eine Mischung aus HTML und BB-Codes verwendet, kann man den Quelltext nicht einfach so weiterverarbeiten. Der WoltLab Blog importiert den Text als HTML und hängt alle Bilder, die man im Artikel direkt eingefügt hat, als Dateianhang an. Bilder von Galerieplugins usw. werden natürlich nicht übernommen.


Deswegen ist es erst mal wichtig die WordPress-Installation nicht gleich zu löschen, sondern folgenden Ordner weiter auf dem FTP zu belassen:


wordpress/wp-content/uploads/


In dem Ordner sind alle Bilder hinterlegt und darauf verlinkt auch der WoltLab Blog. Alle anderen Ordner kann und sollte man aus Sicherheitsgründen löschen, ansonsten können Sicherheitslücken ausgenutzt werden, wenn man WordPress nicht weiter pflegt. Man darf die alte Installation keinesfalls einfach brachliegen lassen.


Alle weiteren Anpassungen nimmt man ab jetzt erst mal per Datenbankabfage im WoltLab Blog vor. Also am besten erst einmal eine Datensicherung erstellen.


Das erste Problem ist der Autorenname, der wird direkt aus WordPress übernommen und muss dann gegebenenfalls angepasst werden. Dazu kann man diese Abfrage verwenden:


SQL
  1. UPDATE blog1_entry SET username = REPLACE(username, 'admin', 'neuerName');


Anschließend konvertiert man die HTML-Tags in BB-Code. Was letztendlich wie durchgeführt bzw. ersetzt wird, ist jedem selbst überlassen, man kann die Ersetzungen beliebig anpassen. Man sollte auch bei jeder Abfrage das Ergebnis kontrollieren, damit man es rechtzeitig merkt, falls etwas schliefgelaufen ist und vor allem was. Und natürlich benötigt nicht jeder alle Abfragen. Der nachfolgende Teil ist mehr als eine Empfehlung zu sehen.

SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<!--more-->', '');

Ersetzt den Weiterlesen-Tag


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<br />', '');

Entfernt die HTML-Zeilenumbrüche


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<blockquote>', '[quote]');
  2. UPDATE blog1_entry SET message = REPLACE(message, '</blockquote>', '[/quote]');

Ersetzt HTML-Zitate durch BB-Code


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<strong>', '[b]');
  2. UPDATE blog1_entry SET message = REPLACE(message, '</strong>', '[/b]');

Ersetzt fette Schrift durch BB-Code


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<h3>', '[size=12][b]');
  2. UPDATE blog1_entry SET message = REPLACE(message, '</h3>', '[/size][/b]');
  3. UPDATE blog1_entry SET message = REPLACE(message, '<h2>', '[size=12][b]');
  4. UPDATE blog1_entry SET message = REPLACE(message, '</h2>', '[/size][/b]');

Ersetzt HTML-Titel durch BB-Code


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<ul>', '[list]');
  2. UPDATE blog1_entry SET message = REPLACE(message, '<li>', '[*]');
  3. UPDATE blog1_entry SET message = REPLACE(message, '</li>', '');
  4. UPDATE blog1_entry SET message = REPLACE(message, '</ul>', '[/list]');

Ersetzt ungeordnete HTML-Listen durch BB-Code


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<hr />', '');

Entfernt HTML-Linien


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '<em>', '[i]');
  2. UPDATE blog1_entry SET message = REPLACE(message, '</em>', '[/i]');

Ersetzt kursive Schrift durch BB-Code


SQL
  1. UPDATE blog1_entry SET message = REPLACE(message, '</p>', '');
  2. UPDATE blog1_entry SET message = REPLACE(message, '<p>', '');

Entfernt HTML-Absätze


Hat man sämtichen HTML-Code entfernt, kann man nun noch die Einstellungen für die Artikel ändern:

SQL
  1. UPDATE blog1_entry SET enableBBCodes = 1;
  2. UPDATE blog1_entry SET enableSmilies = 1;
  3. UPDATE blog1_entry SET enableHTML = 0;

Aktiviert BB-Code, Smilies und deaktiviert HTML für alle Artikel



Jetzt muss man eigentlich nur noch durch die Artikel gehen und die Dateianhänge wieder an die richtigen Stellen im Artikel platzieren, dort dann den HTML-Code entfernen. Abschließend nicht vergessen noch mal alle Anzeigen im ACP zu aktualisieren.


Ist alles erledigt, kann man sich an einem neuen Blogsystem erfreuen und muss nicht jedes mal in Panik ausbrechen, wenn mal wieder eine Sicherheitslücke in WordPress durch die Presse geht.


Habt ihr auch schon mal WordPress in den WoltLab Blog importiert? Dann könnt ihr eure Installation gerne in den Kommentaren verlinken.


Mein neuer Blog ist noch nicht live zu sehen, sobald das der Fall ist, werde ich die Adresse nachtragen.

Deine Anfrage wurde nicht beantwortet? Dann bitte einfach noch mal kurz im Thema nachfragen.


Mein Blog: TwentyMag <- Lesen, Teilen, Liken, Kommentieren, Abonnieren. Ihr wisst bescheid, was labere ich hier groß rum :eyes:

Comments 21

  • Tom, nun wird einiges verbessert. JustCode im WL Forum hat für mich den Importer verbessert. Hab dazu ein Thema erstellt (leider keine Reaktion, wie üblich) und nuna uch noch einen PR bei github.


    https://community.woltlab.com/…eim-import-aus-wordpress/
    https://github.com/WoltLab/com…cf.exporter/pull/19/files

  • Tom wie hast du das eigenltcih mit Tabellen gelöst? Falls du welche verwendet hast.
    Das ist ja echt haarsträubend... Bin da aktuell mal wieder dran....

    • Leider gar nicht, mehr als neu anlegen ist mir bisher nicht eingefallen da jeder Tabelle andere Tags aufweist.

    • Schade dass WL da nicht "sauber" arbeitet beim import. Ich mach mal den Vorschlag mti Verweis auf den Blog Beitrag. Vielleicht können die das ja integrieren dass es direkt umgesetzt wird.

    • Das hat nichts mit dem Import oder sauber zu tun, die HTML-Tabellen mit zich verschiedenen Tags, Klassen und Inline-Formatierungen werden ja von Wordpress erzeugt, meiner Meinung nach ist das generell nicht ohne weiteres möglich die in BBCode umzuwandeln.

    • Muss ja nicht wegen den Tabellen. Ich meine generell könnten die allgemeinen Tags dann wenigstens umgewandelt werden.

  • Leider bring ich es nicht so hin, wie beschrieben, da alle Artikel die Kategorie: Import bekommen. Würde sogar jemandem Zahlen, wenn er mir mein altes Blog zurück zaubern könnte mit WBB Blog :).

  • Gibt es mittlerweile schon den neuen Blog zu sehen? Wie kommst du voran?

    • Ich habe nun all deine SQL codes befolgt. Super! Mir fehlt aber noch etwas um hyperlinks in Beiträgen umzustellen.
      Gibt s da auch etwas?

    • UPDATE blog1_entry SET message = REPLACE(message, '<a href="', '[url=''');
      UPDATE blog1_entry SET message = REPLACE(message, '" target="_blank">', ''']');
      UPDATE blog1_entry SET message = REPLACE(message, '</a>', '[/url]');
      UPDATE blog1_entry SET message = REPLACE(message, '&nbsp;', '');
      UPDATE blog1_entry SET message = REPLACE(message, '<b>', '');
      UPDATE blog1_entry SET message = REPLACE(message, '</b>', '');

    • Kannst du ja bei dir noch einfügen oben. Hat bei mir geklappt und alles super :D

    • UPDATE blog1_entry SET message = REPLACE(message, '<b>', '');
      UPDATE blog1_entry SET message = REPLACE(message, '</b>', '
      ');


      Damit wird dann auch die fette schrift korrekt umgewandelt und nicht einfach nur verworfen ;)

    • Ja hab ich bei mir auch angepasst noch :) hab nun 70 Zeilen update replacement :P
      Bis auf den alten YouTube Code und Tabellen ist alles sauber

  • Auf http://www.wobTunes.de kann man sehen, wie es aussehen kann. Vorher WordPress und nun WoltLab Blog. ;)

  • Geniale Arbeit Tom! VIelen Dank für diesen Artikel. Ich habe mit Patrick auch schon gesprochen und teste gleich sein neues Plugin zur WBB Anbindung mit der dann die Artikel als Themen erstellt werden