Neulich hat mich wieder einmal der Rappel gepackt. Ich habe mir ein Projekt aufgebürdet, das manche Leute übertrieben und hirnrissig genannt hätten. Wiederum andere Leute hätten von einer neurotischen Aktion gesprochen – und Verständnis hätte es, wenn überhaupt, nur von jener Sorte Perfektionisten gegeben, die selbst den Drang verspüren, selbst an jenen Orten für penible Ordnung zu sorgen, wo nie jemals ein menschliches Auge hinfällt.
Also, es geht um dieses Blog hier. Wie seinerzeit besprochen, habe ich vor zweieinhalb Jahren mein CMS gewechselt. Seitdem nutze ich WordPress, wie es global sehr viele Webbetreiber tun.
Die gestalterischen Altlasten
Beim Umstieg habe ich seinerzeit dafür gesorgt, dass die Beiträge aus dem alten CMS mitkommen und manuell die verloren gegangenen Kategorien nacherfasst. Darüber hinaus habe ich keine Optimierungsanstrengungen unternommen.
Das hatte gewisse Folgen. Zum Beispiel, dass diese importierten Posts nicht sonderlich ansprechend ausgesehen haben. Unschön waren vor allem die Bilder: Sie waren beim alten CMS spaltenbreit. In WordPress laufen die Textzeilen nun aber etwas weiter, sodass die Bilder etwas zu schmal waren und am linken Rand hingen. Das ist keine Tragödie und schmälert den Nutzen der Website nicht. Aber als ich neulich eine ästhetische Anwandlung habe, kam ich zum Schluss, dass sich das ändern muss.
Die Lösung: Die Bilder zentrieren – und vor allem auch die Bildlegenden, die vorher als normale Textzeile in kursiv unter das Bild gesetzt waren, als richtige Bildlegende markieren.
WordPress hält dafür den Caption-Shortcode bereit. Er sorgt dafür, dass die Bildlegende bündig unter dem Bild sitzt und auf keiner Seite übersteht – was sehr viel schöner aussieht und die Bildlegende klar als solche erkennbar macht.
Doch wie sollte ich diese Änderung umsetzen? Anfänglich war die Idee, dass ich das nach Gelegenheit tue: Sollte ich zufällig einen alten Beitrag zu Gesicht bekommen, würde ich ihn manuell nachbearbeiten. Das ist eine Frage von dreissig Sekunden und lässt sich auch nebenbei erledigen.
Gleich richtig und ein für alle Mal
Doch als ich das einige Zeit so gehandhabt hatte, wurde ich vom Ehrgeiz gepackt. Ich wollte diese Sache nicht unendlich vor mir herschieben, sondern definitiv bereinigen. Doch für eine manuelle Bereinigung war die Zahl der zu bearbeitenden Beiträge einfach zu gross – 2100 waren es nämlich ungefähr. Selbst bei 30 Sekunden pro Beitrag wären das mehr als zwei Arbeitstage gewesen.
Darum musste eine automatisierte Lösung her. Und natürlich, das Mittel der Wahl das Suchen und Ersetzen mittels regulärer Ausdrücke. Das ist eine Wunderwaffe für solche Fälle. Allerdings eine, die einem auch gehörig um die Ohren fliegen kann, wenn man sie nicht richtig einsetzt. Wenn man sich nur um ein Zeichen vertippt, könnte es passieren, dass man seine Website nicht optimiert, sondern ruiniert.
Darum wollte ich das nicht mittels PhpMyAdmin direkt auf der Datenbank tun. Das ist zwar ein unkomplizierter Weg, der vor zweieinhalb Jahren mir bestens geholfen hat, die Links und Verknüpfungen zu den Bildern anzupassen. Doch weil er einem wenige Möglichkeiten zur Kontrolle einräumt, wollte ich es bei diesem etwas kniffligeren Problem auf eine Weise tun, bei der ich vorab überprüfen kann, ob ich das erwünschte Resultat erziele.
Regulär suchen und ersetzen
Darum habe ich nach einem WordPress-Plugin gesucht, mit dem man Suchen-Ersetzen-Aktionen mit regulären Ausdrücken durchführen kann. Ich bin bei Search Regex gelandet.
Dieses Plugin tut genau das, was man von ihm erwartet – und zwar auf komfortable Weise:
- Es lässt sich einstellen, welche Datenbankfelder bearbeitet werden: Beiträge mit oder ohne Entwürfe, Seiten oder auch die Revisionen von Beiträgen.
- Eine Liste zeigt die Textstellen, die zum Suchmuster passen. Man sieht eine Vorschau der Änderungen und kann probehalber auch einzelne Textstellen ändern und über das Menü im Frontend öffnen, um zu sehen, ob alles passt.
- Anstelle eine Fundstelle zu ändern, kann man sie auch löschen. (Eintrag Remove im Dropdown-Feld mit den Optionen fürs Ersetzen.)
- Man darf Suchläufe als Presets abspeichern und jederzeit übers Menü reaktivieren oder auch bearbeiten.
- Ach ja, und man kann auch ganz normale Suchen-Ersetzen-Vorgänge durchführen, also ohne regulären Ausdruck.
Mit anderen Worten: Das ist genau das richtige Werkzeug. Zu kritisieren gibt es eigentlich nur die Dürftigkeit der Dokumentation.
So hatte ich lange gebraucht, um selbst mit dieser Anleitung hier zu verstehen, was der Unterschied zwischen Single und Multiple bei den Optionen fürs Ersetzen bewirkt. Der Unterschied ist, ob nur einzelne Zeilen oder mehrere bearbeitet werden. Wenn man Zeilenumbrüche entfernen oder ersetzen will, dann muss man mit Multi arbeiten.
Bildlegenden als Caption auszeichnen
Genau das wollte ich natürlich tun: Um die Verlinkung der Bilder zu optimieren, habe ich diese Suchläufe verwendet – für Bilder, die einen Link zur Bilddatei nutzen, und für solche ohne Link:
Das hat letztlich gut geklappt. Aber erst nach Beseitigungen zweier Hürden:
Erstens musste ich erst noch einige Altlasten beseitigen. Mein altes CMS, Flatpress, hatte die Unsitte, unnötige HTML-Parameter in den Code zu packen. Bei Links (a) gibt es via title-Attribut einen Eintrag, der den Link mit dem Link selbst anschreibt.
Wozu das gut sein soll, erschliesst sich mir nicht – vielleicht, dass man den Link als Tooltip sieht. Den wäre auch in der Fusszeile ersichtlich. Einen ähnlichen Unfug stellt Flatpress auch bei Bildern an: Dort wird der Dateiname in die alternative Beschreibung (alt) gepackt. Auch nicht hilfreich; dort muss eine sprechende Bildbeschreibung stehen.
Zweitens funktioniert die Suche nach Zeilenwechseln nicht zuverlässig. Warum, kann ich nicht sagen – vielleicht sind die Zeilenwechsel nicht konsequent als LF (Linefeed, 0a) codiert. Oder ich stand sonstwie auf dem Schlauch. Ich habe, wie oben ersichtlich, anstelle der eigentlich vorgesehenen Escape-Sequenz \n
einfach den Punkt verwendet. Keine lupenreine Lösung, aber sie hat nach längerem Hin und Her geklappt.
Fazit: Perfektionismus hat seinen Preis. Man muss sich mit unsauberem HTML-Code, mit der heimtückischen Regex-Syntax und mit schlecht dokumentierten WordPress-Plugins herumschlagen. Doch es gibt auch einen Lohn: Die alten Blogposts hier im Blog sehen nun wieder hübsch aus – dass die meisten davon inhaltlich hoffnungslos veraltet sind, ändert sich dadurch aber leider nicht.
Beitragsbild: Perfektion, Symbolbild (icon0.com, Pexels-Lizenz).