WordPress: Kommentare und Trackbacks trennen

geschrieben am 20.Januar 2009


Tendenziell werden WP-Themes nach dem Design ausgewählt. Hinterher ist der Ärger meist groß, weil das Theme gewisse Dinge nicht unterstützt. Kein Problem. In Zukunft werden wir ein wenig “customizen”. Diesmal möchte ich euch zeigen, wie man schnell und unkompliziert die Trackbacks aus den Kommentaren holt. Wie man die Kommentarzahl in Kommentare und Trackbacks bei der Anzeige teilt, werde ich in einem gesonderten Post die Woche erklären.

Ihr öffnet also eure comment.php eures Themes. In den meisten Themes kommt oben die WP-Afrage, danach folgen dann die Kommentare erst bzw. deren Auflistung.

<?php foreach ($comments as $comment) : ?>

In dieser Zeile wird, wie nicht anders zu erwarten, eine Foreach-Schleife angefangen. Dort hakt man ein und ermitteln den Kommentar-Typen. Und fügen diese Zeilen in unseren Code ein.

<?php
$kommantartyp = get_comment_type();
if($kommentartyp == &quot;comment&quot;) {
?>

Die Variable ruft die Funktion get_comment_type() auf, welche WordPress von Haus aus mitbringt. Sie liefert nichts anderes als einen String zurück. Nämlich comment, pingback oder trackback. Wenn also der Kommentartyp ein comment ist, dann gib uns die Kommentare aus.

Vor Ende der Foreach-Schleife schließen wir unsere Bedingung. Dem “Non-comment”-Kommentar wird noch beigebogen, dass er gar kein Kommentar ist sondern ein Trackback.

<?php
} else { //if-Abfrage $kommentartyp
$trackback = true;  //Du bist'n Trackback!
}
?>

Das Ende der Foreach-Schleife ist diese Zeile

<?php endforeach; /* end for each comment */ ?>

Danach folgt meist noch ein HTML-Tag. Die Liste oder der DIV-Container werden geschlossen. Und jetzt kommt der Punkt, wo die Trackbacks eingefügt werden. Wichtig: Innerhalb der Schleife, wo die Kommentare angezeigt werden. Also oberhalb der Zeile:

<?php else : // this is displayed if there are no comments so far ?>

Und das ist der Code (naked), der über der Else-Zeile eingefügt werden muss:

<?php
if ($trackback == true) {
foreach ($comments as $trackback) :
$kommentartyp = get_comment_type();
if($kommentartyp !=&quot;comment&quot;) {
comment_author_link() ;
}
endforeach;
}
?>

Im Prinzip ist es nichts anderes wie die Kommentare auch ausgeben werden. Allerdings dass nun eben auf den comment_type gefiltert wird. Natürlich solltet Ihr eure Trackbacks noch formatieren. Sowohl HTML als auch CSS.

Als Beispiel:

<?php if ($trackback == true) { ?>
<ul class=&quot;trackbacks&quot;>
<?php foreach ($comments as $trackback) :
$kommentartyp = get_comment_type();
if($kommentartyp != &quot;comment&quot;) { ?>
<li><?php comment_author_link() ?></li>
<?php }
endforeach; ?>
</ul>
<?php } ?>

Wer z.B. eine Aufzählung vor den Links haben möchte, der nimmt anstelle einer unordered List (ul) eine ordered list (ol). Hinterher über CSS noch ein wenig hübsch machen und eure Trackbacks sind aus den eigentlichen Kommentaren raus. Die Funktion comment_author_link ist ebenfalls Bestandteil von WordPress. Sie gibt einen Link mit der URL des Kommentars mit Anzeige des Autors.

Fragen? Fragen!
In den Kommentaren, per Mail oder Twitter

PS: Die deutschen Variablennamen sind absichtlich gewählt. Ich weiss, dass man es nicht macht ;) Mag aber vielleicht für den einen oder anderen zum besseren Verständnis dienen. Man möge es mir verzeihen.