Diese Anleitung bezieht sich ausschließlich auf WordPress 2.7 und die darin enthaltenen neuen erweiterten Kommentarfunktionen. Wie man die Kommentare in seinem eigenen Theme für WordPress 2.7 bereit macht kann man hier und hier (auf deutsch) nachlesen.
WordPress 2.7 kommt mit einer neuen Funktion wp_list_comments die sich um die Ausgabe der Kommentare kümmert, und die ohne Änderungen alle Kommentare in - falls gewünscht - verschachtelter sowie chronologischer Reihenfolge ausgibt, ohne dabei Rücksicht darauf zu nehmen, ob es sich um ein normales Kommentar oder um einen Pingback bzw. Trackback handelt. Das lässt sich jedoch recht einfach realisieren. Die folgenden Änderungen werden am Default-Theme gezeigt, lassen sich aber auf jedes beliebige Theme anwenden.
Zuerst ein Blick auf die normale Kommentarschleife:
<?php if ( have_comments() ) : ?>
<h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to “<?php the_title(); ?>”</h3>
<ol class="commentlist">
<?php wp_list_comments(); ?>
</ol>
<div class="navigation">
<div class="alignleft"><?php previous_comments_link() ?></div>
<div class="alignright"><?php next_comments_link() ?></div>
</div>
<?php else : // this is displayed if there are no comments so far ?>
<?php if ('open' == $post->comment_status) : ?>
<!-- If comments are open, but there are no comments. -->
<?php else : // comments are closed ?>
<!-- If comments are closed. -->
<p class="nocomments">Comments are closed.</p>
<?php endif; ?>
<?php endif; ?>
Zuerst einmal müssen wir eine Kleinigkeit in der single.php ändern, diese Datei also öffnen und nach folgendem Codeschnipsel suchen:
comments_template();
und ändern in:
comments_template('',true);
Dadurch kriegen wir ein global verfügbares Array namens $comment_by_type, dass wir später nutzen können. Wen es interessiert, der leere Parameter ist für die zu ladende Datei, per default also comments.php. Die Änderungen in der single.php sind damit abgeschlossen, die Datei kann geschlossen werden.
In der comments.php sucht man nach folgender Zeile:
<?php if ( have_comments() ) : ?>
und fügt direkt darunter folgendes ein:
%lt;?php if ( !empty($comments_by_type['comment']) ) : ?>
Dann ändert man noch
<?php wp_list_comments(); ?>
in
<?php wp_list_comments('type=comment'); ?>
ab und fügt hinter
</ol>
ein
<?php endif; ?>
ein. Dadurch haben wir erstens die Ausgabe auf reine Kommentare beschränkt, Ping- und Trackbacks werden für den Moment nicht angezeigt. Zusätzlich sorgt die if-Abfrage dafür, dass die Überschrift und die Liste nur dann angezeigt werden, wenn auch wirklich Kommentare vorliegen.
Um die Ping- und Trackbacks anzuzeigen fügen wir folgenden Codeschnipsel direkt unter dem gerade eingefügten endif; ein:
<?php if ( !empty($comments_by_type['pings']) ) : ?>
<h3 id="pings">Trackbacks/Pingbacks</h3>
<ol class="commentlist">
<?php wp_list_comments('type=pings'); ?>
</ol>
<?php endif; ?>
Über die if-Abfrage wird wieder abgefragt, ob Kommentare vom Typ Ping-/Trackback vorliegen. Falls das der Fall ist wird eine Überschrift und eine Liste mit den entsprechenden Kommentaren generiert und angezeigt. Die komplette, neue Kommentarschleife sieht also wie folgt aus:
<?php if ( have_comments() ) : ?>
<?php if ( !empty($comments_by_type['comment']) ) : ?>
<h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to “< ?php the_title(); ?>”</h3>
<ol class="commentlist">
<?php wp_list_comments('type=comment'); ?>
</ol>
<?php endif; ?>
<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="pings">Trackbacks/Pingbacks</h3>
<ol class="pinglist">
<?php wp_list_comments('type=pings'); ?>
</ol>
<?php endif; ?>
<div class="navigation">
<div class="alignleft"><?php previous_comments_link() ?></div>
<div class="alignright"><?php next_comments_link() ?></div>
</div>
<?php else : // this is displayed if there are no comments so far ?>
<?php if ('open' == $post->comment_status) : ?>
<!-- If comments are open, but there are no comments. -->
<?php else : // comments are closed ?>
<!-- If comments are closed. -->
<p class="nocomments">Comments are closed.</p>
<?php endif; ?>
<?php endif; ?>
Und das war es auch schon. Für den Moment werden sämtliche Kommentare gleich angezeigt, wie diese sich auch in der zugrunde liegenden Struktur ändern lassen wird in einem Folgeartikel erklärt.