smart | Webentwicklung
Alles rund um HTML5, PHP, WordPress & Co.

Letzte Kommentare in WordPress anzeigen (ohne Plugin/Widget)

19. April 2012
Stephan
WordPress

Neben der Möglichkeit, die Top-Kommentatoren eures Blogs anzuzeigen, die ich bereits in einem früheren Artikel vorgestellt habe, könnte man auch die zuletzt geschriebenen Kommentare auflisten.

Für WordPress gibt es für diese Zwecke zwar schon ein Standard-Widget und diverse Plugins, aber für diejenigen, welche bei der Ausgabe eventuell flexibler sein möchten bzw. mehr Gestaltungsfreiraum benötigen, denen zeige ich hier eine alternative Möglichkeit.

Wie könnte das ganze aussehen? Beispiel

Ein einfaches Beispiel für die Anzeige der letzten Kommentare eures Blogs:

WordPress: Letzte Kommentare anzeigen

Das Design könnt ihr mit ein wenig CSS beliebig an euer Blog-Design anpassen.

Der Code zum Ermitteln der letzten Kommentare

Der folgende Code kann in die functions.php-Datei kopiert werden:

function get_latest_comments($limit = 5) 
{
	global $wpdb;

	$results = $wpdb->get_results('
		SELECT
			c.comment_ID, 
			c.comment_author, 
			c.comment_content, 
			p.ID, 
			p.post_title
		FROM
			'.$wpdb->comments.' c
		INNER JOIN
			'.$wpdb->posts.' p ON (c.comment_post_id = p.ID)
		WHERE
			comment_approved = "1"
			AND c.comment_type = ""
			AND p.post_status != "trash"
		ORDER BY c.comment_date DESC
		LIMIT '.$limit.'
	');

	$output = '<ul>';	
	foreach ($results as $row) 
	{
		$comment_url = get_comment_link($row->comment_ID);
		$comment_author = $row->comment_author;
		$comment_text = mb_substr($row->comment_content, 0, 50, 'utf-8').'...';
		$output .= '<li><a href="'.$comment_url.'" title="Kommentar zu: ' . $row->post_title . '">';
		$output .= $comment_author.': '.$comment_text;
		$output .= '</a></li>';
	}
	$output .= '</ul>';
	return $output;
}

Im ersten Teil dieser Funktion (Zeile 1 – 22) werden die 5 zuletzt verfassten Kommentare aus der Datenbank geholt. Der zweite Teil (Zeile 24 – 34) dient dagegen der Zusammensetzung der Ausgabe. In diesem Fall erzeugen wir einfach für jeden Kommentar ein Listenelement <li></li>, welches wiederum einen Link enthält, der auf den entsprechenden Artikel und den entsprechenden Kommentar verweist.

Kurze Erklärung der SQL-Anweisung im Detail

SELECT (Zeile 6 – 11)
Selektiert werden die Kommentar-IDs, die Namen der Kommentatoren, der Kommentar-Text, die zum Kommentar dazugehörige Post-ID (Artikel-ID) und der Titel des Artikels.

FROM (Zeile 12 – 15)
Wir beziehen uns auf die comments-Tabelle von WordPress und verbinden diese mittels einem JOIN noch mit der posts-Tabelle. Der Join erfolgt dabei über die Post-ID.

WHERE (Zeile 16 – 19)
Zu den Bedingungen zählen folgende Punkte:

  • der Kommentar wurde freigegeben
  • der Kommentar ist auch eines und nicht etwa ein Trackback oder Pingback
  • der kommentierte Artikel liegt nicht im Papierkorb (Trash)

ORDER BY & LIMIT (Zeile 20 – 21)
Geordnet werden die selektierten Datenätze absteigend nach dem Kommentar-Datum. Weiterhin wird noch festgelegt, wie viele Kommentare aus der Datenbank geholt werden (standardmäßig sind es 5).

Der Code zum Anzeigen der letzten Kommentare

Der folgende Code kann an beliebige Stelle in eurem WordPress-Theme platziert werden. Möchte man also z.B. die Liste der letzten 10 Kommentare in der Sidebar anzeigen, kann man den folgenden Code z.B. in die sidebar.php einfügen.

echo get_latest_comments(10);

Fazit

Je nachdem, wie ihr die Ausgabe haben wollt, könnt ihr den Beispiel-Code natürlich individuell anpassen.

Es wäre z.B. auch möglich noch zusätzlich anzugeben, wann der Kommentar geschrieben wurde. Hierfür müsste man einfach aus der Datenbank noch das Datum holen und mit in die Ausgabe integrieren.

Außerdem könnte man noch eine Einschränkung vornehmen, so dass eigene Kommentare, also Kommentare vom Admin, nicht angezeigt werden.

Zeigt ihr in eurem Blog die letzten Kommentare an?

Kommentare  
8 Kommentare vorhanden
1 Sascha schrieb am 18. Juni 2013 um 10:47 Uhr

Vielen Dank für diesen tollen Beitrag, allerdings hätte ich noch eine Frage. Wie gebe ich die Kategorie mit aus? In der Zeile

$output .= $comment_author.‘: ‚.$comment_text;

würde ich gerne noch die Kategorie dazwischen setzen. Wie mache ich das?

Grüße

2 Sascha schrieb am 18. Juni 2013 um 11:36 Uhr

Ich meinte natürlich den Artikel und nicht die Kategorie. Mein Fehler sorry 🙁

3 Stephan L. schrieb am 18. Juni 2013 um 12:08 Uhr

Hallo Sascha,

mit der Anzeige der Kategorie wäre es zwar auch kein Problem, aber dann müsstest du den Query noch erweitern.

Aber wenn es nur der Titel des Artikels sein soll, dann einfach wie in Zeile 30 mittels $row->post_title ausgeben lassen.

Du müsstest das also nur in Zeile 31 integrieren:

$output .= $comment_author.': ' . $row->post_title . $comment_text;

Grüße

Stephan

4 Sascha schrieb am 18. Juni 2013 um 16:43 Uhr

Super, danke dir Stephan 🙂

Finde deine Beiträge wirklich schön geschrieben und erklärt, werde auf jedenfall auch in Zukunft deine WordPress Posts lesen 🙂

5 Sascha schrieb am 18. Juni 2013 um 16:49 Uhr

Gibt es auch eine Möglichkeit den Text der Kommentare in Wörter statt Buchstaben anzugeben? Denn abgehakte Wörter sehen nicht immer toll aus.

Bin für jeden Post dankbar bei dem man Sachen nicht über Widgets sondern direkt im Code angeben kann. Ich weiß nicht warum aber ich mag Widgets und Plugins in WordPress einfach nicht, habe lieber Code 😀

Grüße
Sascha

6 Stephan L. schrieb am 19. Juni 2013 um 17:36 Uhr

Hi Sascha,

danke dir für dein tolles Feedback! 🙂

Ja, also für die abgeschnittenen Wörter habe ich jetzt keine Lösung parat. Denkbar wäre mittels strrpos die Position des letzten Leerzeichen innerhalb von $comment_text zu finden. Anschließend einfach mithilfe von substr den Teilstring von $comment_text von Position 0 bis zur ermittelten Position ausgeben lassen.

Grüße

Stephan

7 Dividenden-Sammler schrieb am 5. März 2014 um 00:09 Uhr

Hallo,

das ist genau das, was ich gesucht habe.
Bis jetzt habe ich es über ein widget versucht, sieht aber doof aus: http://dividenden-sammler.de/?page_id=3588&preview=true

Ich benötige nämlich noch Datum und Uhrzeit des Kommentars, damit die Leute wissen, um z.B. 13.00 war ich online – und das sind die letzten neuen Kommentare bis 13.00 Uhr.

Wie kann ich das Datum und die Uhrzeit abfragen und dann in einer Zeile mit dem Kommentar ausgeben?

Ich denke das wäre genau das, was meine Leser sich inzwischen wünschen, da die Kommentare immer mehr werden, teilweise über 50 Kommentare pro Beitrag…

Kein Wunder, wenn sich die Leser bei mir beschweren, das sie keinen Überblick mehr haben.

Ich wäre sehr dankbar, wenn es für das Problem mit Datum und Uhrzeit eine Lösung gibt (bin kein HTML- und PHP- Experte…, gebe mir aber große Mühe 🙁 )

Vielen Dank und beste Grüße
Michael

8 Ulf schrieb am 27. Januar 2015 um 20:45 Uhr

Hallo Stephan,

vielen Dank für dieses Tutorial! Ich miste gerade mein ziemlich angestaubtest WP von 2006/2007 aus, bin aber kein Freund von Widgets. Das hier ist genau, was ich gesucht habe.

Grüße
Ulf

0 Trackbacks/Pingbacks vorhanden
Du bist herzlich eingeladen auch ein Kommentar zu hinterlassen!
Kommentar schreiben

Vielen Dank für dein Kommentar!