Seit einer Weile habe ich nach einer Möglichkeit gesucht, die Top-Posts meiner Seite, die das WordPress-Stats-Plugin ermittelt hat, in mein Template einzubinden. Ich wollte gerne eine Liste der fünf meistbesuchten Posts haben, am besten noch mit der Anzahl der Kommentare.
Ich erinnerte mich, daß ich dafür schon einmal ein Plugin gesehen hatte: WordPress Popular Posts. Aber als ich es installiert hatte, mußte ich feststellen, daß es in der neusten Version ausschließlich als Widget funktioniert und kein Template-Tag zur Verfügung stellt. Das brachte mir natürlich überhaupt nichts, denn mein Template ist nicht für Widgets vorgesehen, und das soll sich auch nicht ändern. Und eine ältere Version des Plugins zu installieren, ist ja nun auch keine dauerhafte Lösung.
Doch wie immer dachte ich mir: „Mensch, das muß doch auch so gehen!“ Und das tut es auch! Mit ein paar wenigen Codezeilen kann man seine Top-Posts vom WordPress-Stats-Plugin an jeder beliebigen Stelle seines Templates einbinden, ganz ohne irgendein zusätzliches Plugin!
Und so geht’s:
Beliebte Artikel
-
'.get_the_title($post['post_id']).'
Kurze Erläuterung
- Zeile 1: Die ganze Liste wird nur erstellt, wenn das WordPress-Stats-Plugin installiert und aktiviert ist.
- Zeile 5: Hier wird definiert, welche bzw. wie viele Posts angezeigt werden sollen. Stellt man „days“ auf -1, bekommt man die Top-Posts der gesamten Zeit, in der das Stats-Plugin Daten gesammelt hat. Stellt man es aber z. B. auf 7, bekommt man die Top-Posts der letzten sieben Tage. Der Wert „limit“ gibt an, wie viele Posts man anzeigen möchte. In dem Beispiel werden also die fünf beliebtesten Posts angezeigt.
- Zeile 8: Hier erfolgt die Ausgabe des Links mit Anzahl der Kommentare. Natürlich kann man das HTML je nach Bedarf noch anpassen.
Update (17. März 2010)
Es wurde gefragt, ob man auch bestimmte Seiten ausschließen kann. Das Stats-Plugin selbst sieht eigentlich kein „exclude“ vor. Aber es gibt natürlich auch hierfür einen Weg:
Beliebte Artikel
-
'.get_the_title($post['post_id']).'
Zunächst muß man also das Limit mindestens um die Zahl der ausgeschlossenen Seiten erhöhen. Im Zweifelsfall lieber ein wenig zu hoch als zu niedrig. Danach trägt man in das Array, in das ich jetzt beispielhalber „1, 17, 25, 39“ geschrieben habe, die IDs der auszuschließenden Seiten ein. Gegebenenfalls ersetzt man noch in der Zeile if($i >= 5) break;
die 5 durch die gewünschte Anzahl an Top-Seiten, falls man mehr oder weniger als fünf Top-Posts anzeigen möchte.
16 Antworten zu “WordPress-Statistiken plugin- und widgetfrei ins Template einbinden”
Hi,
ich habe den Code von dir mal in meine Sidebar eingebaut und das klappt prima.
Nur eine Frage.
Gibt es eine Möglichkeit, dass ich gewisse Seiten ausblende?
Ich würde gerne die Startseite und die Loginseite ausblenden.
Vielen Dank und Grüße
Detlef
Lassen sich eventuell grundsätzlich Seiten ausschließen?
Damit würde die Startseite, Impressum und dergleichen nicht aufgelistet.
Ich habe meinen Post editiert. Antwort siehe oben. :)
Hi,
hat prima geklappt.
Vielen Dank
[…] Stats – Anzeige der Top-Beiträge direkt im […]
Danke für den tollen Codeschnipsel. Habe das mal probehalber bei mir versucht und konnte zwei Phänomene feststellen.
Zum einen ist die Anzahl der angezeigten Kommentare immer gleich (entweder alle 3 Kommentare oder auch manchmal 5 Kommentare unabhängig von der wirklichen Anzahl der Kommentare) und zum anderen ist der erste Eintrag der Liste immer leer.
Woran könnte das liegen?
Das mit der Anzahl der Kommentare verstehe ich grad nicht so ganz – vor allem, weil es hier gar nicht um Kommentare, sondern um Top-Posts geht!? :D Alle 3? Manchmal 5? Versteh‘ irgendwie nicht, was Du mir sagen willst. ;)
Wenn die erste Zeile leer ist, liegt das daran, daß deine Top-Seite die Startseite ist. Und da die nun mal keinen Titel hat, wird auch keiner angezeigt. Das Problem hatte ich hier auf der Seite vor zwei Tagen auch festgestellt und habe den Code deshalb nochmal leicht abgeändert (eigentlich nur Zeile 8):
'.get_the_title($post['post_id']).'('.get_comments_number($post['post_id']).' Kommentare) ';
$i++;
if($i >= 5) break;
}
?>
Prima, mit der Funktion „empty“ werden keine leeren Beiträge mehr angezeigt. Eigentlich hatte ich die Startseite in deinem Beispiel oben bereits ausgeklammert, vielleicht habe ich die falsche ID angegeben.
Zu den Kommentaren: In deinem Codebeispiel werden ja die Anzahl der Kommentare zum jeweiligen angezeigten Artikel mit ausgegeben. Doch die Anzahl der angezeigten Kommentare stimmt nicht und ist bei allen ausgegebenen Artikel ebenfalls gleich. Quasi als hätten alle 5 der beliebten Artikel x Kommentare.
Achsoo, jetzt hab’ ich’s kapiert. ;)
Hmm, das ist aber komisch – wie Du hier ganz unten auf der Seite siehst, funktioniert es ja bei mir richtig. Habe im Moment keine Idee, woran das bei Dir liegen kann. Hast Du ganz sicher kein Fehlerchen drin? :) Ich grübel mal weiter …
Hi i would like to know how can i implement timthumb in this ? My timthumb code looks like this