WordPress: Anzahl der Kommentare zu einem Artikel ermitteln | Update: 14. April 2017

Achtung! Es gibt ganz unten ein Update zu diesem Beitrag, bitte beachten…

Als ich angefangen habe, nach einer Lösung für diese Aufgabe zu suchen, hab ich natürlich erstmal im WordPress Codex nachgeschaut. Mit der Funktion <a href=“http://codex.wordpress.org/Template_Tags/get_comments_number“ target=“_blank“>get_comments_number</a> oder auch <a href=“http://codex.wordpress.org/Function_Reference/comments_number“ target=“_blank“>comments_number</a> hat man da im Grunde schon, was man haben will. Dachte ich zumindest.

Problem an diesen Funktionen ist allerdings, dass sie auch Pingbacks und Trackbacks mitzählen, die in WordPress ebenfalls als Kommentar gehandhabt werden. Das mag den ein oder anderen nicht stören, ich wollte auf der Startseite allerdings nur eine Anzeige „echter“ Interaktionen, echter (Text-)Kommentare zu einem Artikel. Also musste was anderes her.

get_comments_number und Co. haben leider keine Möglichkeit den Suchstring zu filtern, also die Suche auf Textkommentare einzuschränken. Die Lösung liegt darin, erstmal alle Kommentare heranzuziehen und dann Ping-/Trackbacks wieder rauszuwerfen. Das was über bleibt sind dann die besagten Textkommentare.

In Quelltext gegossen sieht das dann wie folgt aus:

$args = array(
            'status' => 'approve',
            'post_id' => $post->ID,
            'type' => '',
            );

      $comments = get_comments($args);
      foreach($comments as $key=>$value)
      {
         if(($value->comment_type == 'pingback') || ($value->comment_type == 'trackback'))
         unset($comments[$key]);
      }
      $number = count($comments);
      unset($comments);

      if($number > 0) { echo '| '.$number.' <i class="icon-comment"></i>'; }

In Zeile 1 bis 5 sammeln wir erstmal die Parameter für die Abfrage der Kommentare. Dabei werden nur bereits genehmigte Kommentare ausgewählt (Zeile 2), sie werden für den aktuellen Artikel geholt (Zeile 3) und wir nehmen alle Arten von Kommentaren mit (Zeile 4).

Das Ganze übergeben wir als Parameter an <a href=“http://codex.wordpress.org/Function_Reference/get_comments“ target=“_blank“>get_comments</a> und freuen uns über den Rückgabewert, nämlich ein Array mit allen Kommentaren.

Das arbeiten wir dann Schritt für Schritt ab (Zeile 8 bis 12) und schauen dabei, ob das aktuelle Element (jeweils ein Kommentar) im Array vom Typ Pingback oder Trackback ist (Zeile 10). Sollte das so sein, dann schmeissen wir es aus dem Array raus (Zeile 11).

Übrig bleibt am Ende ein Array, dass nur noch Textkommentare enthält. Die können wir dann ganz einfach mittels count zählen (Zeile 13) und am Ende den Speicher wieder schön frei machen, indem wir unsere komplette Kommentarsammlung einfach löschen (Zeile 14).

Übrig bleibt zu prüfen, ob es überhaupt Kommentare gibt (Zeile 16) und eine entsprechende Ausgabe.

Wie man hier sieht, das ist meine Implementation, gebe ich einen Trennstrich aus, dann die Zahl der Kommentare und schließlich den Code, um mittels des hier genutzten Icon-Fonts eine kleine Sprechblase zu erzeugen.

Ich hoffe das hier konnte wieder dem ein oder anderen helfen. Hinterlasst in den Kommentaren gerne eure Fragen oder eure Umsetzungen dieser Funktion in Webseiten. Dann können wir auch gleich nochmal testen, ob die Funktion wirklich so arbeitet wie gewünscht. ;-)

Update am 14. April 2017

Wie Sven in den Kommentaren korrekt erwähnt hat, kann man get_comments() auch einen Parameter für den gewünschten type übergeben. Damit lassen sich komfortabel nur Kommentare oder Ping- und Trackbacks zurückgeben lassen und man spart sich den Overhead mit dem Entfernen der Elemente aus dem Array…

Damit würde der Code von oben wie folgt aussehen:

$args = array(
            'status' => 'approve',
            'post_id' => $post->ID,
            'type' => 'comment',
            );

      $comments = get_comments($args);
      $number = count($comments);
      unset($comments);

      if($number > 0) { echo '| '.$number.' <i class="icon-comment"></i>'; }

Wieso ich das vor drei Jahren nicht gleich so gemacht habe… Ich hab keine Ahnung… :-D

Support your local flomei
Wenn du hier etwas gefunden hast, dass dir privat oder beruflich weitergeholfen hat und du dafür Danke sagen möchtest, dann könntest du
<a href=“http://amzn.to/2jN1yRz“ target=“_blank“>diesen Link benutzen,</a> um bei Amazon einzukaufen, mir etwas von <a href=“https://www.amazon.de/registry/wishlist/47WBLQYIEDBS“ target=“_blank“>meinem Amazon Wunschzettel</a> schenken oder <a href=“http://paypal.me/flomeipunktde/2“ target=“_blank“>eine Leberkässemmel finanzieren.</a>

Über mich

Ich bin gelernter Mediengestalter, studierter Druck- und Medientechniker und leidenschaftlicher Tüftler und Bastler.

Beruflich beschäftige ich mich mit der digitalen Transformation von Unternehmen, sowie der Automatisierung von Unternehmensprozessen, in der Druck- und Medienbranche. Mehr dazu findet sich im Lebenslauf.

Privat interessieren mich Kaffee(maschinen), Themen rund um Webentwicklung, das Internet im Allgemeinen und Speziellen und vieles, vieles mehr.

Ich freue mich auf Feedback per E-Mail unter kontakt@flomei.de, einen Euro für die Kaffeekasse oder etwas von meiner Amazon Wunschliste.