Alle WordPress Kommentare ausleiten und formatieren

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 12 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Die Ausgabe der Kommentare kann an verschiedenen Ecken gewollt sein. So könnte man sich beispielsweise eine Ausgabe der letzten x Kommentare auf einem zentralen Template vorstellen. Dazu braucht man die letzten Kommentare oder auch alle Kommentare, die die Installation besitzt. Anbei eine kleine Lösung, die alle Kommentare, oder auch eine gewissen Anzahl, ausliest und mit Markup versorgt wird.

Der folgende Code gehört beispielsweise in ein Template, welches dann einer Seite in WordPress dient und so eine Ausgabe der Kommentare realisiert. Dabei können verschiedene Spielarten erdacht werden, der Code soll nur als Denkstütze dienen und den SQL-Syntax erleichtern.
Die folgenden Lösung bildet aktuell die Kommentare ab, ohne Track- und Pingbacks.


global $wpdb;

$max = '-1'; // -1 for all
$result = '';
$sql  = "SELECT c.*, p.post_title FROM $wpdb->comments c INNER JOIN $wpdb->posts p ON (c.comment_post_id = p.ID) ";
$sql .= "WHERE comment_approved = '1' ";
$sql .= "AND comment_type not in ('trackback', 'pingback') ";
$sql .= "AND p.post_status != 'trash' ";
$sql .= "ORDER BY comment_date DESC";
if ('-1' != $max)
	$sql .= " LIMIT 0, $max";
$results = $wpdb->get_results($sql);

$templates = "\t" . '<li>%gravatar% <a href="%authorurl%">%authorname%</a> zu <a href="%posturl%#comment-%commentid%">%posttitle%</a> %commentcontent%</li>' . "\n";

foreach ($results as $row) {
	$tags = array(
		'%commentdate%', '%gravatar%', '%posttitle%', 
		'%posturl%', '%authorurl%', '%authorname%', 
		'%commentid%', '%commentcontent%'
	);
	$replacements = array(
		$row->comment_date, get_avatar($row->comment_author_email, '30'), $row->post_title, 
		get_permalink($row->comment_post_ID), $row->comment_author_url, $row->comment_author, 
		$row->comment_ID, $row->comment_content
	);
	$result .= str_replace($tags, $replacements, $templates);
}
if ($result)
	$result = '<ul>' . "\n" . $result . '</ul>' . "\n";

// output
echo $result;

Will man dies außerhalb von WordPress nutzen, dann kann man alternativ den Kommentarfeed nutzen und die Kommentare, die im Feed sind, ausgeben oder man bindet die wp-load.php der Installation ein und hat vollen Zugriff auf alle Funktionen von WordPress.


require('wp-load.php');

Viele Freude beim nutzen und Hinweise, Fehler und Erweiterungen bitte in den Kommentaren dieses Beitrags.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.