WordPress: Meistkommentierte Artikel anzeigen (ohne Plugin)

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 meistkommentierten Artikel ermittelt und ausgibt.

Code zum Ermitteln der meistkommentierten 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;
}
PHP - Datei: functions.php

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 meistkommentierten 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 Artikel mit den meisten Kommentaren 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 Funktion

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-Benutzers mit berücksichtigt werden sollen oder nicht.

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-Benutzer 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.

Code zum Anzeigen der Artikel mit den meisten Kommentaren

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 meistkommentierten 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();
PHP - Datei: sidebar.php

Für die Anzeige der meistkommentierten Artikel innerhalb der letzten 30 Tage unter Nichtberü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);
PHP - Datei: sidebar.php

Fazit

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

Aktualisierungshistorie:
  • 06. August 2012
    ursprüngliche Veröffentlichung in meinem ehemaligen Blog "Smart-Webentwicklung"
Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).