Kurz vor Ende des letzten Jahres ist mir aufgegangen, dass mein Projekt 2020 noch der Vollendung harrt. Zur Rekapitulation: Es geht um die Datenbank meiner Artikel, die ich seit ungefähr 1992 in Microsoft Access führe.
Diese Lösung ist nicht mehr zeitgemäss: Ich hätte gerne eine Möglichkeit, von überallher und auch mobil auf mein Archiv zuzugreifen. Darum soll diese Datenbank entweder ins Web oder aber wenigstens aufs Smartphone.
Ich habe zu diesem Zweck mehrere Möglichkeiten getestet:
- Eine App, mit der sich Access-Datenbanken öffnen lassen. Das Resultat war aber sehr unbefriedigend.
- Die Konvertierung der Datenbank nach MySQL und das Hochladen auf den Webserver. Das funktioniert bestens, krankt aber daran, dass ich keine Benutzerschnittstelle zur Verfügung habe, um die Daten auch zu nutzen. Eine Software, die das ermöglicht, habe ich gefunden. Der Schönheitsfehler ist der Preis von 500 US-Dollar für dieses Datenbank-Frontend.
- Airtable. Ich habe mit diesem Zwitter aus Tabellenkalkulation und Datenbank experimentiert, doch hier sprengt mein Projekt die Möglichkeiten des günstigen Abos.
An dieser Stelle war meine Begeisterung abgeebbt: Es schien, dass Aufwand und Ertrag in einem krassen Missverhältnis stehen. Denn so schön es wäre, die Datenbank zur Verfügung zu haben, will ich mich deswegen nicht in ungebührliche Unkosten stürzen und auch keinen extremen Aufwand betreiben.
Trotzdem wollte ich das Projekt 2020 mit wenigstens einem Jahr Verspätung zu Ende bringen. Ich bin daher auf die Idee verfallen, einen Testlauf mit Wordpress zu unternehmen. Denn der Kern meiner Artikelsammlung sind die Artikel – und die sind in einem Content Management System naturgemäss gut aufgehoben.
Die wesentlichen Informationen lassen sich problemlos übernehmen
Wichtig sind mir neben dem Volltext obendrein das Erscheinungsdatum und das Medium, in dem der Text publiziert worden ist. Diese Informationen lassen sich in Wordpress problemlos abbilden: Jeder Post hat ein Erscheinungsdatum, und das Medium lässt sich via Kategorie oder Tag zuordnen.
Meine Access-Datenbank ist zwar relational aufgebaut, d.h. sie hat mehrere über Schlüssel verbundene Tabellen. Aber zwingend ist das nicht: Die Haupttabelle ist diejenige, in der die Artikel steckt. Ich habe noch zwei, drei Tabellen extra eingebaut, weil ich die Möglichkeiten einer relationalen Datenbank ausloten wollte. Aber die lassen sich ohne wesentliche Einschnitte weglassen.
Also, erste Frage: Wie einfach bekommt man seine Access-Datenbank nach Wordpress ? Ein direkter Import ist nicht möglich. Doch wenn ich mich auf eine Tabelle (oder Abfrage) beschränke, kann ich die in einem Format exportieren, die ich in Wordpress hineinbekomme. Es bietet sich Excel oder simples CSV an. Den Trick habe ich schon einmal erfolgreich angewandt, nämlich, als ich die Inhalte aus einer alten PHP-Website in Wordpress hineingebastelt habe.
In ein paar Minuten ist der Mist geführt
Für den Import der CSV-Datei habe ich mit zwei Plugins experimentiert.
Erstens mit Import Content in Wordpress & WooCommerce with Excel. Das hat den Zweck mehr oder weniger erfüllt, ist aber wahnsinnig langsam. Der Import meiner rund 8000 Artikel hätte Stunden gedauert und so viel Geduld hatte ich nicht.
Das zweite Plugin hingegen ist ein Volltreffer. Das heisst WP All Import und erfüllt in der kostenlosen Version meine Bedürfnisse.
Doch weil es den Job so gut – und in drei, vier Minuten – erledigte und in der Kaufvariante noch zusätzliche, interessante Funktionen aufweist, habe ich mir die Pro-Version für 99 US-Dollar geleistet. Denn so viel ist mir mein Archiv wert!
WP All Import importiert nicht nur CSV, sondern auch XML. Was mich überzeugt, ist die einfache Zuordnung der Felder aus der Import-Tabelle mit Wordpress -Datenfeldern. Es ist kein Ding, das Datum aus der CSV-Tabelle mit dem Datumseintrag des Wordpress -Beitrags zu verbinden; den Inhalt richtig zu befüllen und den Code des Mediums als Kategorie anzulegen.
Zusatzinformationen als Custom fields ablegen
Die Pro-Variante ermöglicht zusätzlich, die Felder, die nicht direkt mit Wordpress -Datenbankeinträgen korrespondieren, als custom fields anzulegen. Das sind selbst angelegte Datenbankeinträge, die man nach Gutdünken nutzt.
Da ich meine Artikel, die ich damals als rasender Reporter geschrieben habe, mit einer Ortsangabe versehen habe, konnte ich diese Angabe in ein eigenes Feld übernehmen. Ebenfalls das Honorarfeld, die Angabe der Textsorte oder Rubrik und solche Dinge. Auf die hätte ich zur Not auch verzichtet. Aber warum sie nicht in die neue Datenbank hinüberretten, wenn die Möglichkeit besteht?
Die Pro-Variante speichert die Zuordnung der Felder als Vorlage ab, was ebenfalls nützlich ist, wenn man mit einer gewissen Regelmässigkeit solche Importvorgänge wiederholen möchte.
Das hat nicht perfekt, aber recht gut geklappt. Nach dem Import musste ich ein paar Sonderzeichen wie Gedankenstriche und Apostrophe korrigieren. Ausserdem habe ich zwischen Absätzen eine Leerzeile eingefügt, damit die Artikel besser dargestellt werden. Für diese Aufgabe habe ich das im Beitrag Perfektion hat ihren Preis besprochene Plugin Search Regex benutzt. Die Leerzeilen habe ich direkt in phpMyAdmin reingebastelt (\n in \n\n). Sinnvollerweise bereitet man aber schon die CSV-Exportdatei passend auf.
Ausserdem sind fünfzig Artikel auf der Strecke geblieben. Ich muss herausfinden, welche das sind und warum die nicht importiert werden konnten. Das sollte anhand der ausführlichen Logdatei von WP All Import eine lästige, aber nicht übermässig schwierige Angelegenheit sein¹.
Ende gut – fast alles gut!
Die Sammlung meiner Artikel ist unter archiv.matthiasschuessler.ch zugänglich. Gegenwärtig gibt es keinerlei Restriktionen, aber ich habe vor, den Abruf irgendwie einzuschränken.
Vielleicht baue ich eine Art Paywall oder stelle von den Beiträgen öffentlich nur den Anfang zur Verfügung. Da muss ich noch herausfinden, was am praktikabelsten ist. (Denn einige der Artikel, die dort zu lesen sind, gibt es andernorts nur mit einem Abo – das will ich mit meinem Archiv nicht unterlaufen.)
Es bleibt noch etwas Raum für Perfektionierung. Erstens die Möglichkeiten zur Suche und Filterung, die mit den Standard-Möglichkeiten von Wordpress nicht zufriedenstellen. Doch auch diesbezüglich lässt sich eine Verbesserung erzielen: Siehe Wie man die miserable Wordpress-Suche verbessert.
Zweitens die Frage, wie man die Daten aus den individuellen Feldern (custom fields) vernünftig anzeigt.
Im Backend von Wordpress sind sie standardmässig nicht zu sehen – dass sie vorhanden sind, konnte ich via phpMyAdmin überprüfen (PS: Wie grotesk ist eigentlich die Datenbankstruktur von Wordpress ?)
Also, wie bekommt man diese Daten ohne übermässigen Aufwand im Frontend zu sehen und/oder wie kann man sie im Backend bearbeiten?
Ich habe erste Erfolge mit dem Plug-in Advanced Custom Fields erzielt. Hier richtet man eine Feldgruppe ein, in der die von WP All Import Pro importierten Variablen erfasst werden. Und siehe da: So erscheinen die Metadaten im Backend beim einzelnen Artikel. Ich werde experimentieren, ob ich sie auch im Frontend angezeigt bekomme – aber unbedingt nötig ist das nicht, weil diese Informationen im Grund nur mich etwas angehen.
Die Erkenntnisse zu den «custom fields» in Wordpress habe ich in einem eigenen Beitrag ausführlich zusammengefasst: So wird Wordpress «gehackt»
Fussnoten
1) Eine Inspektion hat ergeben, dass alle Beiträge importiert worden sind. Die Meldung, es seien fünfzig Beiträge übersprungen worden, ist offenbar unzutreffend. Im Log heisst es «ERROR: Inhalt, Titel und Textauszug sind leer». Das deutet darauf hin, dass versucht wurde, Phantom-Beiträge einzulesen. Die können z.B. durch Leerzeilen entstanden sein. ↩
Beitragsbild: Eine schöne Ablage macht Freude – egal, ob analog oder digital (Anete Lusina, Pexels-Lizenz).