Deutsch English
WordPress Read this post in English

WordPress-Statistiken plugin‑ und widgetfrei ins Template einbinden

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:

1
2
3
4
5
6
7
8
9
10
11
12
<?php if(function_exists('stats_get_csv')) : ?>
	<h3>Beliebte Artikel</h3>
	<ul id="popularposts">
	<?php
		$top_posts = stats_get_csv('postviews', 'days=-1&limit=5');
		foreach($top_posts as $post) {
			if(!get_post($post['post_id']) || empty($post['post_id'])) continue;
			echo '<li><a href="'.get_permalink($post['post_id']).'">'.get_the_title($post['post_id']).'</a><div class="commentsnumber">('.get_comments_number($post['post_id']).' Kommentare)</div></li>';
		}
	?>
	</ul>
<?php endif; ?>

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:

<?php if(function_exists('stats_get_csv')) : ?>
	<h3>Beliebte Artikel</h3>
	<ul id="popularposts">
	<?php
		$top_posts = stats_get_csv('postviews', 'days=-1&limit=10');
		$i = 0;
		foreach($top_posts as $post) {
			if(!get_post($post['post_id']) || empty($post['post_id']) || in_array($post['post_id'], array(1, 17, 25, 39))) continue;
			echo '<li><a href="'.get_permalink($post['post_id']).'">'.get_the_title($post['post_id']).'</a><div class="commentsnumber">('.get_comments_number($post['post_id']).' Kommentare)</div></li>';
			$i++;
			if($i >= 5) break;
		}
	?>
	</ul>
<?php endif; ?>

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.



Kommentare

1 2

  1. 5. September 2011
    20:25 Uhr

    Ginchen flag

    Hi,
    eine Dokumentation gibt es zu der Funktion wohl leider nicht, soweit ich weiß. Ich habe einfach nur einen Blick in den Quellcode des Stats-Plugins geworfen und mir das Ganze dann selbst zusammengebastelt. Habe gerade auch noch mal nachgeguckt, ob da evtl. inzwischen was geändert wurde, so dass die –1 nicht mehr funktioniert – aber nichts. Eigentlich sollte es noch gehen. Ich werd’ das die Tage noch mal genauer untersuchen und dann Bescheid geben. ;)

  2. 5. September 2011
    18:05 Uhr

    vanvox flag

    Danke für den Tipp. Ich habe den code jetzt bei mir in der Sidebar eingebaut. Es funktioniert, solange ich bei days keine –1 angebe. Da werden nur 2 Beiträge geliefert. Wo finde ich eine Spezifikation von der Funktion? Habe schon das halbe WWW durchsucht…
    Grüße Christina

  3. 5. Oktober 2010
    16:51 Uhr

    Ginchen flag

    I have absolutely no idea what timthumb is. And you didn’t post your code in `backticks`, so it’s quite scrambled now. I tried to repair it a little, but … well.

    Anyhow, I would try something like this:

    if(get_post_meta($post['post_id'], "thumb", true)) {
        $imagelink = '<a href="'.$STUFF_MISSING_HERE.'" alt="'.get_the_title($post['post_id']).'" />IMAGE MISSING HERE!?</a>';
    } elseif ((preg_match("/ggpht.com/i", getImage('1'))) || preg_match("/blogspot.com/i", getImage('1'))) {
        $imagelink = '<a href="'.$STUFF_MISSING_HERE.'" alt="'.get_the_title($post['post_id']).'" />IMAGE MISSING HERE!?</a>';
    } elseif(!getImage('1') == "") {
        $imagelink = '<a href="">WHATEVER MISSING HERE!?</a>';
    } else {
        $imagelink = '<a href="">WHATEVER MISSING HERE!?</a>';
    }

    Then put that code before line 8, and edit line 8 to something like this:

    echo '<li><a href="'.get_permalink($post['post_id']).'">'.$imagelink.'</a><div class="commentsnumber">('.get_comments_number($post['post_id']).' comments)</div></li>';

    Anyway, don’t just copy and paste this, because, as you can see, there’s still stuff missing in there (the upper-case stuff) that I wasn’t able to find within the code you posted. You will have to fill that in yourself or post the whole code here again in `backticks`.

1 2

Kommentieren

Erlaubtes HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <p> <pre lang="" line="" escaped=""> <q cite=""> <strike> <strong> <img src="" alt="" class="" width="" height=""> | Codeschnipsel können in `backticks` gepostet werden. Beispiel: `<?php echo "Hi!"; ?>`