Kein Blog kommt ohne vernünftige Kommentarfunktion aus, deshalb soll auch unser Template mit einem Kommentarformular ausgestattet werden. Lege als erstes die Datei comments.php in deinem Template-Ordner an.
Das Kommentar-Formular anlegen
In die Datei comments.php fügen wir nun folgenden Code ein:
<div id="kommentar_formular">
<h3 id="respond">Kommentar schreiben</h3>
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
<p>
<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" />
<label for="author">Name</label>
</p>
<p>
<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
<label for="email">Email <small>(wird nicht veröffentlicht)</small></label>
</p>
<p>
<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url">Webseite</label>
</p>
<p>
Kommentar
<textarea name="comment" id="comment" style="width: 100%;" rows="10" tabindex="4"></textarea>
</p>
<p>
<input name="submit" type="submit" id="submit" tabindex="5" value="Kommentar abschicken" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>
</form>
</div> <!-- kommentar_formular -->
Erklärung:
In die Div-Box „kommentar_formular“ kommt unser kompletter Code der für das Formular nötig ist.
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
Das „action“-Attribut des Formulars erwartet den Link zur Datei „wp-comments-post.php“, die sich im root-Ordner des Blogs befindet (schau nach :) ). Diese Datei erwartet ein paar Werte und trägt den Kommentar ein, wenn alles in Ordnung ist. „get_option(’siteurl‘);“ gibt uns die Blog-Root Url, daran hängen wir noch den Namen der Datei und der Formular-Kopf ist fertig.
Als nächstes erstellen wir die Input-Felder für die Werte „author“, „email“ und „url“, sowie eine Textarea für den „comment“. Je nach Einstellung im WordPress Backend erwartet die Datei „wp-comments-post.php“ diese Werte. Die Value-Werte von author, email und url sind jeweils mit einer Variable ausgestattet:
value="<?php echo $comment_author; ?>"
value="<?php echo $comment_author_email; ?>"
value="<?php echo $comment_author_url; ?>"
Wenn ein Besucher schonmal kommentiert hat und seine Werte noch vorhanden sind, werden die Formular-Felder vorausgefüllt, was dem Besucher ein bisschen Arbeit erspart.
Die beiden letzten Input-Elemente sind der Submit-Button und ein verstecktes Feld.
<input name="submit" type="submit" id="submit" tabindex="5" value="Kommentar abschicken" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
Der Submit-Button ist soweit selbsterklärend und das hidden-Feld erwartet die ID des aktuellen Beitrags, ebenfalls wichtig für die „wp-comments-post.php“-Datei.
<?php do_action('comment_form', $post->ID); ?>
Bei der letzten Zeile handelt es sich mal wieder um ein Plugin-API-Hook, sprich es gibt Plugins, die diesen Hook brauchen um korrekt zu funktionieren. Also, einfach rein und glücklich sein ;)
Kommentare ausgeben
Jetzt haben wir zwar ein Formular, über das der Besucher seinen Kommentar schreiben kann, aber noch keine Möglichkeit die Kommentare anzuzeigen. Dazu gibt es, ähnlich wie bei den Beiträgen, eine Loop, die Kommentar Loop. Füge unterhalb des Kommentarformulars in der Datei comments.php den folgenden, markierten Code ein:
</form>
</div> <!-- kommentar_formular -->
<div id="kommentare">
<?php foreach ($comments as $comment) : ?>
<div class="comment" id="comment-<?php comment_ID() ?>">
<small class="commentmetadata"><?php comment_author_link() ?> <strong>|</strong> am <?php comment_date('j. F Y') ?> um <?php comment_time('H:i') ?> Uhr</small>
<?php comment_text() ?>
<?php if ($comment->comment_approved == '0') : ?>
<strong>Achtung: Dein Kommentar muss erst noch freigegeben werden.</strong><br />
<?php endif; ?>
</div>
<?php endforeach; /* end for each comment */ ?>
</div><!-- kommentare -->
Der Code ist schnell erklärt: Wir wollen alle Kommentare in der Div-Box „kommentare“ ablegen. Danach startet die Comment-Loop mit:
<?php foreach ($comments as $comment) : ?>
Jeder Kommentar erhält seine eigene Div-Box mit der Klasse „comment“. Da wir uns in der Loop befinden, können wir auf alle Kommentardaten des jeweiligen Kommentars zugreifen. Wir brauchen
- den Autor – „comment_author_link()“, das ist der Name + der Link, wenn der User eine URL beim eintragen mit angegeben hat
- das Datum und die Uhrzeit – „comment_date(‚j. F Y‘)“ und „comment_time(‚H:i‘)“
- den Kommentar – „comment_text()“
Der letzte Teil ist eine Anzeige-Prüfung. Wenn der Kommentar erst von einem Admin freigeschaltet werden muss, bekommt der User eine Nachricht und weiß, dass sein Eintrag erfolgreich war.
Kommentarformular anzeigen
Jetzt müssen wir nur noch eine Änderung an der Datei single.php vornehmen, damit unser Kommentarformular auch angezeigt wird:
<?php get_header(); ?>
<div id="main">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<div id="meta">
<p>
erstellt am: <?php the_date('d.m.Y'); ?> |
von: <?php the_author(); ?> |
Kategorie(n): <?php the_category(', '); ?>
</p>
</div>
<div class="entry">
<?php the_content(); ?>
</div>
<?php endwhile; endif; ?>
<?php comments_template(); ?>
</div><!-- main -->
<div id="sidebar">
<?php get_sidebar(); ?>
</div><!-- sidebar -->
<?php get_footer(); ?>
comments.php
Hier nochmal zur Zusammenfassung, was alles in unserer comments.php stehen soll:
<div id="kommentar_formular">
<h3 id="respond">Kommentar schreiben</h3>
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
<p>
<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" />
<label for="author">Name</label>
</p>
<p>
<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
<label for="email">Email <small>(wird nicht veröffentlicht)</small></label>
</p>
<p>
<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url">Webseite</label>
</p>
<p>
Kommentar
<textarea name="comment" id="comment" style="width: 100%;" rows="10" tabindex="4"></textarea>
</p>
<p>
<input name="submit" type="submit" id="submit" tabindex="5" value="Kommentar abschicken" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>
</form>
</div> <!-- kommentar_formular -->
<div id="kommentare">
<?php foreach ($comments as $comment) : ?>
<div class="comment" id="comment-<?php comment_ID() ?>">
<small class="commentmetadata"><?php comment_author_link() ?> <strong>|</strong> am <?php comment_date('j. F Y') ?> um <?php comment_time('H:i') ?> Uhr</small>
<?php comment_text() ?>
<?php if ($comment->comment_approved == '0') : ?>
<strong>Achtung: Dein Kommentar muss erst noch freigegeben werden.</strong><br />
<?php endif; ?>
</div>
<?php endforeach; /* end for each comment */ ?>
</div><!-- kommentare -->
Fazit – mehr zur comments.php
Die hier erklärte comments.php ist die absolute Basis. Es erfolgen so gut wie keine Überprüfungen, also ob nur registrierte Besucher kommentieren dürfen, ob der Beitrag passwortgeschützt ist und demnach wahrscheinlich auch keine Kommentare ohne Passwort angezeigt werden sollen und viele weitere. Zudem werden keine Gravatare angezeigt (User-Bilder neben dem Kommentar) und auch kein Captcha verwendet (wobei das eh besser durch ein Plugin gelöst werden sollte).
Ich denke aber, dass diese Basis besser ist als ein Beispiel was alles kann, denn so kann man selbst entscheiden welche Features man noch haben möchte. In den Template Tags gibt es einen extra Bereich für die Comment Tags, für alle die mehr aus der comments.php rausholen wollen.