Wordpress: Anzahl der Artikel pro Jahr herausfinden
Ein sehr spezieller Quickie für sehr wenige Menschen mit ganz mieser Syntax ;)
Ihr betreibt eine Wordpress-Seite? Ihr wollt wissen, wie viele Artikel Ihr pro Jahr veröffentlicht habt? Klar, das geht über die Datenbank und vermutlich irgendwelche Plug-ins - aber es geht auch ganz ohne spezielle Tools: Über eine exportierte XML-Datei und ein paar ganz simple Bash-Kommandos. Nun ...
Der XML-Driss
Auch ohne Datenbankzugriff könnt Ihr direkt aus Wordpress heraus Daten exportieren, über Werkzeuge/Export. Das produziert eine XML-Datei mit auf Wunsch allen Daten, samt Artikeln, Kommentaren, Bildern und so weiter. Leider ist es gar nicht so einfach, darin alle einzelnen Artikel durchzuzählen, denn IDs bekommen alle möglichen Dinge.
Vermutlich könnte man einfach eine KI damit speisen oder irgendein XML-Auswertungswerkzeug auftreiben, aber eigentlich ist das auf der Kommandozeile mit Standard-Tools viel zu einfach: Artikel-Items identifizieren, Datum auslesen, Artikel pro Jahr zählen lassen.
Hier zunächst mal ein Auszug der XML-Daten:
...
<wp:post_id>5405</wp:post_id>
<wp:post_date><![CDATA[2014-11-01 18:53:32]]></wp:post_date>
<wp:post_date_gmt><![CDATA[0000-00-00 00:00:00]]></wp:post_date_gmt>
<wp:post_modified><![CDATA[2014-11-01 18:53:32]]></wp:post_modified>
<wp:post_type><![CDATA[post]]></wp:post_type>
...
Relevant sind hier zwei Items: post_type identifiziert eindeutig Artikel im Sinne von Posts und post_date_gmt zeigt das Datum dieser Posts als GMT-Zeit. Also gilt es, zunächst alle Posts herauszufiltern und dann das jeweilige Datum.
Die schäbige Syntax
Die Arbeit erledigen vier grep-Kommandos in einer Schleife:
for i in 20{20,21,22,23,24}; do
echo -n $i" " \
egrep -b9 '<wp:post_type><!\[CDATA\[post' meineseite.WordPress.2024-06-19.xml \
| egrep post_date_gmt \
| grep -o "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}" \
| grep -c $i \
done
Es soll hier um die Jahre 2020 bis 2024 gehen, also läuft die Schleife - mit Hilfe von Brace-Expansion - über 20 plus jede Zahl in den geschweiften Klammern.
Zunächst kommt ein echo-Kommando, um die Jahreszahl selbst auszugeben - dank -n ohne neue Zeile.
Dann filtert egrep -b9 ... alle Zeilen, mit dem Post-Typen "post" plus die 9 Zeilen davor (-b9) - weil dort das Datum steht.
Dann filtert egrep post_date_gmt die Datumszeilen heraus.
Dann filtert grep -o ... das jeweilige Datum samt Uhrzeit über die beiden langen, aber simplen regulären Ausdrücke - [0-9]{4} heißt zum Beispiel nur, dass die Ziffern 0-9 genau 4 mal nacheinander stehen müssen und entsprechend ein Jahr ergeben. Mehr zu Regexen, einem der mächtigsten Hilfsmittel aller Zeiten, haben wir hier.
Das letzte grep-Kommando zählt (-c für count) dann einfach alle Zeilen durch. Die fertige Ausgabe sieht dann beispielsweise so aus:
2020 111
2021 843
2022 483
2023 212
2024 50
Und daraus könnt Ihr dann mit LibreOffice Calc oder Excel oder was auch immer schicke Diagramme machen:
Wie gesagt, der Spaghetticode ist nicht hübsch, aber da ich die Daten nur spontan und einmalig brauchte, der Aufgabe sehr angemessen. Und wenn Ihr solche Kleinigkeiten auch mal eben so erledigen können wollt, schaut Euch mal unsere Terminal-Basics-Serie an und greift gegebenenfalls auf unsere hauseigene Terminal-Hilfe im Terminal zu.