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

WordPress: Meist kommentierte Artikel anzeigen (ohne Plugin)

6. August 2012
Stephan
WordPress

Wollt ihr in eurem WordPress-Blog die meist kommentierten, diskussionsreichsten bzw. beliebtesten Artikel anzeigen, dann braucht ihr dafür nicht unbedingt wieder ein zusätzliches Plugin, sondern könnt diese Funktionalität auch ohne Plugin relativ leicht in eurem Blog umsetzen.

Dazu zeige ich euch in diesem Artikel wieder einen kleinen Code-Schnipsel, der euch die meist kommentierten Artikel ermittelt und ausgibt.

Der Code zum Ermitteln der meist kommentierten Artikel

Den folgenden Code könnt ihr wie immer komplett in eure functions.php eures Themes einfügen:

function get_popular_posts_by_comments($dayInterval = -1, $countAdminComments = true, $limit = 5)
{
    global $wpdb;
	
	$countAdminCommentsCondition = $countAdminComments ? '' : 'AND c.user_id != 1';
	
	$dayIntervalCondition = '';
	$joinCommentsTable = '';
	$commentCount = 'p.comment_count';
	
	if($dayInterval > -1)
	{
		$hasDayInterval = true; 
		$dayIntervalCondition = 'AND c.comment_date >= DATE_SUB(CURDATE(), INTERVAL ' . $dayInterval . ' DAY)';
		$joinCommentsTable = 'INNER JOIN ' . $wpdb->comments . ' c ON (c.comment_post_id = p.ID)';
		$commentCount = 'COUNT(*)';
	}

    $results = $wpdb->get_results('
		SELECT
			p.ID, 
			p.post_title, 
			' . $commentCount . ' AS com_count
		FROM
			' . $wpdb->posts . ' p
			' . $joinCommentsTable . '
		WHERE
			p.post_type = "post"
			AND p.comment_count > 0
			AND p.post_status != "trash"
			' . $countAdminCommentsCondition . '
			' . $dayIntervalCondition . '
		GROUP BY
			p.ID
		ORDER BY
			com_count DESC
		LIMIT ' . $limit . '
	');

	$output = '<ol>';
	
    foreach($results as $row)
    {
        $output .= '<li><a href="' . get_permalink($row->ID) . '" title="' . $row->post_title . '">' . $row->post_title . '</a> (' . $row->com_count . ')</li>';
    }

    $output .= '</ol>';

    return $output;
}

Auf den ersten Blick sieht der Code vielleicht etwas lang und komplex aus, aber lasst euch davon nicht abschrecken.

Im ersten Teil der Funktion (Zeile 5 – 17) geht es darum die Ermittlung der meist kommentierten Artikel zu beeinflussen. So kann z.B. eingestellt werden, ob eure Kommentare, die ihr selbst verfasst habt (Admin-Kommentare) mit eingerechnet werden sollen oder nicht.

Weiterhin kann individuell festgelegt werden, dass die Ermittlung der meist kommentierten Artikel sich nur auf abgegebene Kommentare innerhalb der letzten x Tage bezieht.

Der zweite Teil (Zeile 19 – 38) dient dann zum Ermitteln der meist kommentierten Artikel aus der Datenbank.
Anschließend wird im dritten Teil (Zeile 40 – 47) die Ausgabe generiert. Dafür werden die Artikel in eine geordnete Liste gepackt und jeder Artikel wird als ein Listenelement ausgegeben, wobei jeder Artikel natürlich entsprechend verlinkt wird.

Kurze Erklärung der SQL-Anweisung im Detail

Info: Wenn für den Funktionsparameter $dayInterval eine Zahl größer -1 angegeben wird, dann werden nur die Kommentare berücksichtigt, die innerhalb der letzten x Tage (x entspricht $dayInterval) geschrieben wurden.
Weiterhin kann über den Parameter $countAdminComments festgelegt werden, ob die Kommentare des Admin-Users mit berücksichtigt werden sollen oder nicht.

SELECT (Zeile 20 – 23)
Selektiert werden die IDs, Titels und Anzahl der Kommentare der Artikel.

FROM (Zeile 24 – 26)
Wir beziehen uns auf die posts-Tabelle und falls $dayInterval größer -1 ist, dann erfolgt noch ein INNER JOIN mit der comments-Tabelle.

WHERE (Zeile 27 – 32)
Zu den Bedingungen zählen folgende Punkte:

  • es handelt sich um einen Artikel und nicht um eine Seite
  • der Artikel hat mindestens einen Kommentar
  • der Artikel befindet sich nicht im Papierkorb
  • der Kommentar ist nicht vom Admin-User mit der ID 1 (diese Bedingung gilt nur, wenn $countAdminComments gleich true ist)
  • der Kommentar ist innerhalb der letzten x Tage geschrieben worden (diese Bedingung gilt nur, wenn $dayInterval größer -1 ist)

GROUP BY, ORDER BY & LIMIT (Zeile 33 – 37)
Gruppiert wird nach der Artikel-ID und geordnet wird absteigend nach Anzahl der Kommentare. Über den Parameter $limit kann die Anzahl der Datensätze die selektiert werden sollen, angegeben werden.

Der Code zum Anzeigen der meist kommentierten Artikel

Der folgende Code kann an beliebige Stelle in eurem WordPress-Theme platziert werden. Möchte man also z.B. die Liste der Top-5 der meist kommentierten und somit beliebesten Artikel eures Blogs in der Sidebar anzeigen, kann man den folgenden Code z.B. in die sidebar.php einfügen:

echo get_popular_posts_by_comments();

Für die Anzeige der meist kommentierten Artikel innerhalb der letzten 30 Tage unter nicht Berücksichtigung der eigenen, also der vom Admin verfassten Kommentare, würde die Funktion wie folgt aufgerufen werden:

echo get_popular_posts_by_comments(30, false);

Fazit

Der vorgestellte Code-Snippet erlaubt euch auf einfache Weise die Anzeige der meist kommentierten Artikel eures Blogs. Die Ausgabe könnt ihr natürlich wie immer noch anpassen und mit CSS farblich gestalten.

Falls Ihr weitere Fragen zum Code habt, hinterlasst einfach ein Kommentar. Feedback ist immer erwünscht! 🙂

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

Vielen Dank für dein Kommentar!