Alle WordPress Kommentare ausleiten und formatieren

Die Ausgabe der Kommentare unabhängig vom Post muss bisher über eine SQL-Syntax geschehen. Wie dies geht ist hier nun abgelegt und steht für weitere Lösungen und Ideen bereit.

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.

Kommentare sind geschlossen.