Das perfektionistische Ende eines überambitionierten Projekts

So toll es ist, Anwender zu sein – der richtige Spass geht los, wenn man selbst Hand anlegt, Code schreibt und sich seine Web­site zurecht­biegt. Allerdings droht die Gefahr, dass man vor lauter Eupho­rie die Ver­häl­tnis­mäs­sig­keit aus den Augen verliert.

Dank meines Projekts 2020 hatte ich Gelegenheit, noch etwas mehr an Word­press herumzubasteln. Bei diesem Projekt ging es darum, meine seit dreissig Jahren gepflegte Artikeldatenbank ins Web zu bringen.

Nachdem ich verschiedene Wege ausprobiert habe, bin ich bei Word­press gelandet. Ich habe den Import via CSV vorgenommen, anschliessend die Suchmöglichkeiten meinen Bedürfnissen angepasst und Hand an das Theme gelegt, dass die zusätzlichen Datenbankfelder angezeigt werden.

Das Resultat kann sich sehen lassen; es ist unter archiv.matthiasschuessler.ch zu finden.

Nachdem die hauptsächliche Arbeit erledigt war, hatte ich das Vergnügen, mich um einige Details zu kümmern. Zu diesen Details gehören folgende Dinge:

Ein Child Theme einrichten

Nachdem ich im Beitrag So wird Word­press «gehackt» beschrieben habe, welche Anpassungen ich am Theme vorgenommen habe, gab es in den Kommentaren den Hinweis, das sei keine gute Idee. Das Problem war mir schon klargeworden: Wenn man das Theme direkt modifiziert, dann sind mit dem nächsten Update alle diese individuellen Änderungen weg. Man muss sie erneut einbauen, was nur funktioniert, wenn man sie dokumentiert hat. Oder man verzichtet darauf, das Theme zu aktualisieren, was aus Sicherheitsgründen unbedingt zu vermeiden ist. Sicherheitslücken in Themes müssen geschlossen werden; das steht ausser Frage.

Der bessere Weg ist ein Child Theme. Dieses «Kind» enthält die Änderungen getrennt vom «Elternteil», sodass sich das Elternteil unabhängig davon aktualisieren lässt. Wenn man Anleitungen (wie diese hier) liest, wie so ein Abkömmling entsteht, dann könnte einem die Lust vergehen, weil das reichlich kompliziert klingt.

Mit diesem Plugin wird das Kindermachen deutlich einfacher.

In Tat und Wahrheit ist es einfach: Ich habe die Erweiterung Child Theme Configurator benutzt, über den man bestimmt, welche Dateien vom Elternteil ins Kinder-Theme kopiert werden sollen. Sobald man sie dort angepasst hat, funktioniert alles wie gehabt.

Die Navigation verbessern

Das normale Theme zeigt auf Übersichtsseiten bloss den Link «Ältere Beiträge» an. Das ist unpraktisch, weil nicht ersichtlich ist, wie viele Beiträge es in einer Kategorie, zu einem Stichwort oder in einer Liste von Suchresultaten gibt.

Ich habe darum die Erweiterung WP-PageNavi installiert. Mit sieht man, wie viele Seiten eine Liste hat. Es gibt Links für die nächsten x Seiten und man kann ans Ende der Liste springen. Damit diese Navigation angezeigt wird, muss man wiederum eine Änderung am Theme vornehmen. In meinem Fall brauchte aber nur eine Zeile ausgetauscht zu werden. Bei index.php, archive.php und search.php habe ich the_posts_navigation(); auskommentiert und stattdessen wp_pagenavi(); reingeschrieben.

Auf der Admin-Seite nach Custom Fields suchen

Es gibt in Word­press die Möglichkeit, eigene Datenbankfelder zu verwenden. Wie beschrieben, bekommt man die mit relativ einfachen Eingriffen ins Theme angezeigt und man kann sie auch für die Suche verwenden. Nur wäre es praktisch, wenn man sie auch im Backend im Zugriff hätte. Ich habe nach einer Möglichkeit gesucht, die Liste der Beiträge im Admin-Bereich nach einem Feld zu filtern.

Ich bin für diesen Zweck auf die Erweiterung Admin Columns Pro gestossen. Die scheint genau das zu tun, was ich gern hätte. Doch sie war mir mit 89 US-Dollar zu teuer.

Durch eine kleine Modifikation ist es möglich, die Liste der Beiträge im Administrationsbereich von Word­press nach den Einträgen in einem Custom Field zu filtern.

Aber es geht zum Glück auch günstiger: Mit etwas Suchen bin ich auf die Anleitung How to filter custom posts by custom field in Word­press admin area gestossen. Sie hält einen überschaubaren Codeschnipsel bereit, den man in die Datei functions.php einfügt und einem via Kommentare anzeigt, wo man was für seine eigenen Zwecke anpassen muss. Im Abschnitt, in dem man seine eigenen Filter ergänzt, habe ich Folgendes eingetragen:

'_Thema' => 'Kummerbox', 'Patentrezept', 'DPR', 'Aufmacher', 'Abmacher', 'Tipp der Woche', 'Online', 'Prepress-Tipp', 'Prepress-Tipp im Web'

Und das war es schon: Jetzt kann ich meine Artikel nach Rubrik filtern. Ich habe daraufhin die wichtigsten Rubriken als Tag zugeordnet, sodass solche formalen Kriterien jetzt auch für die Suche und zum Anklicken unterhalb eines Beitrags zur Verfügung stehen.

Eine Zugangsbeschränkung einrichten

Da viele meiner Artikel hinter einer Paywall stehen, könnte diese über mein Archiv umgangen werden. Selbst wenn mein Archiv für die Öffentlichkeit nicht von sonderlichem Interesse ist, will ich das nicht. Ich habe darum eine Anpassung am Theme vorgenommen, dass der Artikelinhalt nur bei älteren Artikeln angezeigt wird. Für eingeloggte Anwender – also für mich – erscheint immer der vollständige Text.

Diese Änderung ist ebenfalls vergleichsweise simpel, wenn man erst einmal herausgefunden hat, wo man sie vornehmen muss. Es fällt auf, dass Word­press diesbezüglich komplex gestrickt ist. Das liegt natürlich an der Anpassbarkeit über Plugins und Themes, aber es macht es Hobby-Entwicklern wie mir nicht die Orientierung gerade einfach. Der Ansatzpunkt bei meinem Theme ist die Datei content-single.php, wo folgende Änderung den Trick bewirkt:

if( is_user_logged_in() )
{ the_content(); }
elseif ( strtotime( $post->post_date ) < strtotime('-12 months') )
{ the_content(); }
else { echo '<p>Artikelinhalt noch nicht verfügbar</p>'; }

PDF-Dateien

Da ich von den gedruckten Artikeln PDF-Dateien archiviere, liegt die Idee nahe, diese über das Archiv zugänglich zu machen. Die Sache hat aber einen Haken: Die PDF-Dateien sind in der bestehenden Artikeldatenbank nicht verlinkt. Wenn ich für Tausende von Artikeln die passende PDF-Datei als URL angeben müsste, dann wäre mir das viel zu viel Arbeit und die Mühe nicht wert.

Über die Links am Ende sind die Artikel als Faksimile zugänglich (bei den ganz alten Beiträgen noch im Tiff-Format).

Mir ist zum Glück eine einfachere Lösung eingefallen: Da die Dateinamen der PDF-Dateien das Erscheinungsdatum enthalten, füge ich (in single.php) pro Artikel Links zu den PDFs mit korrespondierendem Datum an (siehe auch Wider das Puff auf euren Festplatten). Das ist eine Frage von wenigen Zeilen Code und funktioniert einwandfrei.

Auch beim Link auf die PDF-Datei greift die Zugangsbeschränkung, zumal auf manchen PDF-Dateien nicht nur meine Artikel, sondern auch Beiträge von Kollegen zu finden sind.

Den Import vereinfachen

Da ich meine Artikel möglichst zeitnah ins Archiv einspeisen möchte, habe ich die seinerzeit im Beitrag Im Web ist nichts für ewig beschriebene, in Pascal programmierte Hilfs-App angepasst und aufgebohrt. Die weiss, welche, in HTML-Form aus der Schweizer Mediendatenbank geholten Dateien bereits importiert worden sind. Sie sucht die neu hinzugekommenen Beiträge zusammen. In einer Maske kann ich die Informationen einsehen und Tags, URL zum Originalartikel ergänzen und eine CSV-Datei exportieren, die via WP All Import (siehe hier und hier) mit vier Mausklicks importiert wird.

Einen Award fürs Screendesign wird dieses Programm nicht gewinnen. Aber es erfüllt seinen Zweck.

Fazit: Ja, wahrscheinlich war das trotz allem viel Aufwand für eine Sache, die sich auch weniger perfektionistisch hätte lösen lassen. Aber wisst ihr was? Es hat mir Spass gemacht. So toll es auch ist, als Anwender mit seinen Programmen aufregende Dinge tun zu können: Selbst Hand an Software zu legen und zu programmieren ist, selbst wenn es nur punktuell und auf Amateur-Niveau stattfindet, eine andere Liga. Es lässt keinen Zweifel daran, warum Computer, diese universellen Zaubermaschinen, so grossartige Werkzeuge sind und warum meine Faszination für sie auch nach Jahrzehnten ungebrochen ist …

👉Mit Kevin habe ich über dieses Thema auch im Radio gesprochen: Heute hacken wir das Netz.

Beitragsbild: Ich, wenn ich mich gerade für den genialsten Programmierer halte, den die Welt je gesehen hat (Amina Filkins, Pexels-Lizenz).

Kommentar verfassen