Wordpress: Kommentare nummerieren (v.2.7+)
Anmerkung: Klaus hat mich darauf hingewiesen, dass dieser Artikel in der ersten Fassung etwas zu kurz und zu abstrakt geraten ist und dadurch zu unverständlich ist. Aus diesem Grund habe ich diesen Artikel noch einmal überarbeitet um die einzelnen Schritte nachvollziehbarer zu machen.
Worum es geht
Dieses kurze Tutorial soll zeigen, wie man in Wordpress die Kommentare fortlaufend nummeriert. Der Semantik wäre schon genüge getan, wenn man jeden einzelnen Kommentar als Punkt einer nummerierten Liste (<ol>) auszeichnet. Manchmal will man aber die Nummern Ziffern mit in die Gestaltung einbeziehen und mit CSS aufhübschen. Wie man die Nummer für jeden Kommentar als Zahl in den Quelltext bekommt, soll hier gezeigt werden.
Die Idee
Der HTML-Code für die Kommentare wird erzeugt, in dem die Datensätze in einer Schleife durchlaufen werden und für jeden Durchlauf der entsprechende Kommentar sein HTML-Kleid bekommt. Für unser Vorhaben reicht es also, vor dem Schleifenaufruf eine Zählvariable zu definieren (ich nenne sie hier mal $comment_counter). Innerhalb der Schleife setzen wir einen Befehl, der den Variablenwert um den Wert 1 erhöht.
Vor der Version 2.7 musste man diese Schleife noch von Hand schreiben und die Zählvariable konnte man bequem mit unterbringen. Das Kommentartemplate (comments.php) sah bis 2.7 schematisch etwa so aus:
< ?php
/** comments.php
*/
// Unsere Zählvariable
$comment_counter = 1;
//der Kommentar-Loop
foreach ($comments as $comment) {?>
<li id="comment-<?php comment_ID(); ?>">
<p><cite>< ?php if(function_exists('get_avatar')) echo get_avatar(/*[…]*/); ?>
< ?php comment_type('von', 'Trackback', 'Pingback'); ?>
< ?php comment_author_link(); ?> – < ?php comment_date(); ?> um <a href="#comment-<?php comment_ID(); ?>">
< ?php comment_time(); ?></a></cite>
< ?php edit_comment_link(); ?></p>
< ?php // Hier z.B. die Kommentarnummer ausgegeben: ?>
<p class="nummer">< ?php echo $comment_counter; ?></p>
< ?php comment_text(); ?>
</li>
< ?php
//zum Schluss setzen wir die Zählvariable noch eins hoch:
$comment_counter++;
}
?>Soweit, so gut.
Umsetzung seit Version 2.7
Seit Version 2.7 muss man die Schleife nicht mehr von Hand starten, sondern hat dafür die Funktion wp_list_comments() zur Verfügung. Diese Funktion organisiert den Schleifendurchlauf automatisch und erzeugt gleichzeitig das HTML, auf welches man geringfügig Einfluss nehmen kann, in dem man der Funktion bestimmte Parameter übergibt. Eine Nummerierung der Kommentare ist leider nicht vorgesehen.
Um das erzeugte HTML komplett selbst zu bestimmen (und somit die Kommentarnummer einzufügen), akzeptiert wp_list_comments() eine sogenannte Callback-Funktion, die man selbst schreiben muss und in der man die HTML-Maske für die einzelnen Kommentare bestimmt. Eine solche Funktion, man könnte sie z.B. mytheme_comment() nennen, schreiben wir in die functions.php. Der Name dieser Funktion kann beliebig gewählt werden, allerdings muss sie dem folgendem Schema genügen, um die Funktionalität zu gewährleisten:
< ?php
/** functions.php
*/
function mytheme_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
//Ab hier kann der Kommentar beliebig gestalltet werden
?>
<li <?php comment_class(); ?> id="comment-< ?php comment_ID() ?>">
<h3 class="comment-author vcard">
<cite class="fn">< ?php comment_author_link();?></cite>
</h3>
<div class="comment-meta">Geschrieben am < ?php comment_date();?> um < ?php comment_time(); ?></div>
< ?php if ($comment->comment_approved == '0') : ?>
<p class="commentinfo moderation">Dein Kommentar muss erst durch den Administrator freigeschaltet werden</p>
< ?php endif; ?>
<div class="comment-content">< ?php comment_text(); ?></div>
< ?php
/**
* Das schließende </li>-Tag für den einzelnen Kommentar
* setzt die Funktion wp_list_comments() von selbst, der
* darf hier nicht gesetzt werden!
*/ ?>
}
?>
</li>Um diese Callback-Funktion aufzurufen, übergeben wir deren Name als Parameter in Form eines Strings an die wp_list_comments():
< ?php /** * der Aufruf in der comments.php */ ?> <ol id="commentlist"> < ?php wp_list_comments('callback=mytheme_comment');?> </ol>
Um auch hier die Kommentare mit ihrer Nummer zu versehen, definieren wir die Zählvariable wieder außerhalb der Schleife, also noch von dem Aufruf der Funktion wp_list_comments():
< ?php /** * comments.php */ ?> <ol> < ?php $comment_counter = 0; wp_list_comments('callback=mytheme_comment'); ?> </ol>
Da diese Zählvariable außerhalb der Funktion mytheme_comment definiert wird, ist sie innerhalb der Funktion auch noch nicht „sichtbar“. Da wir sie nich einfach als Parameter an die Funktion übergeben können, müssen wir sie innerhalb von mytheme_comment als global definieren um darauf zugreifen zu können. Anschließend kann man sie per echo-Befehl an der gewünschten Stelle ausgeben und setzt deren Wert zum Schluss noch um 1 höher:
< ?php /** functions.php */ function mytheme_comment($comment, $args, $depth) { //Zugriff auf die Zählvariable (startet bei 0) global $comment_counter; //Zähler heraufsetzen. $comment_counter ++; $GLOBALS['comment'] = $comment; //... echo '<p class="comment_number">'.$comment_counter.''; < ?php } ?>
Ab jetzt hat jeder Kommentar seine eigene Nummer, die man per CSS beliebig gestalten kann.
Kommentare
Es wurden noch keine Kommentarte zu diesem Artikel geschrieben.
Fragen, Ideen oder Kritik? – Hier ist Platz dafür!
Dieser Artikel wurde auf folgenden Seiten verlinkt
- 29. Juni 2010: Comments.php mit functions.php kombinieren | funkygog Blog