Eigenes WordPress-Theme erstellen

Von der HTML-Vorlage zum fertigen WordPress-Theme: Die comments.php

∅ 4.8 / 32 Bewertungen

Die comments.php

Da die comments.php recht umfangreich ist, habe ich sie in zwei Teile aufgeteilt. Hier der erste Teil:

<?php if ( post_password_required() ) : ?>
<p class="nopassword"><?php _e( 'This post is password protected. Enter the password to view any comments.', 'twentyeleven' ); ?></p>
        </div><!-- #comments -->
        <?php
                        /* Stoppt den Aufbau der comments.php wenn die obere Bedingung zutrift.
                         */
                        return;
                endif;
        ?>

<h2 id="comments"><?php comments_number('Keine Kommentare', 'Ein Kommentar', '% Kommentare'); ?>
<?php if ( comments_open() ) : ?>
<a href="#postcomment" title="Hinterlasse ein Kommentar">&raquo;&raquo;</a>
<?php endif; ?>
</h2>

<?php if ( $comments ) : ?>
<ol id="commentlist">

<?php foreach ($comments as $comment) : ?>
<li id="comment-<?php comment_ID(); ?>">
        <?php comment_text(); ?>
<p><cite><?php comment_type('Kommentar', 'Trackback', 'Pingback'); ?> von <?php comment_author_link(); ?> - <?php comment_date(); ?> um <a href="#comment-<?php comment_ID(); ?>"><?php comment_time(); ?></a></cite> <?php edit_comment_link(); ?></p>
        </li>

<?php endforeach; ?>

</ol>

<?php else : // Es wurden noch keine Kommentare abgegeben ?>
<p>Bis jetzt noch keine Kommentare</p>
<?php endif; ?>

<p><?php post_comments_feed_link('RSS-Feed für Kommentare dieses Beitrags'); ?>
<?php if ( pings_open() ) : ?>
- <a href="<?php trackback_url(); ?>" rel="trackback">Die Trackback-Adresse</a>
<?php endif; ?>
</p>

<?php if ( comments_open() ) : ?>
<h3 id="postcomment">Einen Kommentar abgeben</h3>

<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p><?php printf('Du musst dich <a href="%s">eingeloggen</a> um Kommentare abzugeben.', get_option('siteurl')."/wp-login.php?redirect_to=".urlencode(get_permalink()));?></p>
<?php else : ?>

[...]

Passwortschutz: ja oder nein?

In der ersten Zeile wird geprüft, ob der Beitrag, zu dem die Kommentare gehören, durch ein Passwort geschützt ist. Wenn dies der Fall sein sollte und der Besucher das Passwort noch nicht eingegeben hat, soll die Meldung erscheinen: "Tippe dein Passwort ein um die Kommentare zu lesen."

Die Anzahl und die Auflistung der Kommentare

Wurden ein Beitrag und seine Kommentare nicht durch ein Passwort geschützt oder hat man sein Passwort eingegeben, wird der Code weiter ausgeführt. Und zwar mit einer Überschrift zweiter Ordnung ( <h2> ). Der Inhalt der Überschrift wird durch den Template-Tag comments_number(); erzeugt. Dieser Template-Tag überprüft, ob und wie viele Kommentare abgegeben wurden. Auch Track- und Pingbacks werden als Kommentare gezählt. Dieser Tag bekommt drei Parameterwerte für keine, für einen und für mehrere abgegebene Kommentare.

Anschließend folgt innerhalb der Überschrift eine weitere Abfrage: if ( comments_open() ) . Mit dieser wird geprüft, ob die Kommentarfunktion in diesem Beitrag noch aktiv bzw. offen ist. Wenn ja, wird ein Verweis zum Anker postcomment eingebunden: zum Formular um einen Kommentar abzugeben.

Mit if ( $comments ) wird abgefragt, ob schon Kommentare abgegeben wurden, wenn ja, werden diese auch innerhalb einer nummerierten Liste ( <ol> ) aufgelistet. Die eigentliche Auflistung wird durch eine foreach -Schleife realisiert und jeder einzelner Kommentar wird dann als ein Listenelement ( <li> ) ausgegeben. Jedes einzelne Listenelement bekommt einen eindeutigen ID-Wert zugewiesen. Dieser Wert besteht aus dem Wert comment- und der Nummer ( comment_ID(); ) des Kommentars, z. B.: <li id="comment-55272"… Durch die Vergabe eines eindeutigen ID-Wertes ist jeder einzelne Kommentar durch eine eindeutige URL erreichbar, z. B.:

www.perun.net/2013/05/27/10-jahre-wordpress/#comment-275287

Der eigentliche Kommentar wird durch den Template-Tag comment_text(); ausgegeben. Dieser Template-Tag gehört zu den Tags, die keine Parameter haben. Unter dem Kommentar befinden sich einige Kommentar-Informationen:

  • comment_type(); – Die Art des Kommentars: Kommentar, Trackback oder Pingback.

  • comment_author_link(); – Der Link zu der Website des Kommentators, welche im Kommentar-Formular eingegeben wurde.

  • comment_date(); – Das Datum an dem der Kommentar abgegeben wurde.

  • comment_time(); – Die Uhrzeit zu der der Kommentar abgegeben wurde.

Wie Sie aus dem Code herauslesen können, ist die Uhrzeit verlinkt, so dass man sich einfach die Adresse des Kommentars herauskopieren kann, wenn man auf einen interessanten Kommentar verweisen möchte, z. B. wenn Sie beim Lesen eines Weblogs so einen interessanten Kommentar entdecken und sich dann in Ihrem Blog-Artikel auf diesen dann beziehen.

Und dadurch, dass wir vorher dafür gesorgt haben, dass jeder einzelner Kommentar eindeutig adressiert wurde (durch die Vergabe der ID) gelangt der Besucher, der einen solchen Link anklickt, zum richtigen Kommentar.

Anschließend wird die Schleife für die Auflistung der abgegebenen Kommentare beendet ( endforeach; ) und es kommt die Meldung, die ausgegeben wird, wenn noch keine Kommentare abgegeben wurden.

Kommentar-Feed, Trackback-URL und Passwortabfrage

Darunter folgt dann der Link zum Kommentar-Feed des jeweiligen Beitrags ( post_comments_feed_link(); ) und wenn das Weblog das Pingen erlaubt, wird auch die Trackback-Adresse ( trackback_url(); ) des jeweiligen Beitrags ausgegeben, so dass andere Blogger wissen, welche Adresse sie anpingen müssen. 
 (Pingen: Wenn das Weblog die Annahme von Track- und Pingbacks anderer Weblogs zulässt.)

Anschließend startet eine verschachtelte if -Abfrage. Zuerst wird per if ( comments_open() ) geprüft, ob die Kommentar-Funktion bei diesem Beitrag zugelassen ist. Weiter oben hatten wir schon mal die gleiche Abfrage. Wenn ja, wird eine Überschrift ("Einen Kommentar abgeben") ausgegeben. Direkt nach der Überschrift öffnet sich eine weitere if -Abfrage, in der geprüft wird, ob eine Registrierung notwendig ist aber der Kommentator noch nicht eingeloggt ist. Dann kommt die Meldung: "Du musst dich einloggen um Kommentare abzugeben".

Ist man eingeloggt oder kann man ohne Anmeldung kommentieren, erscheint das Kommentarformular:

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">

<?php if ( $user_ID ) : ?>

<p><?php printf('Angemeldet als %s.', '<a href="'.get_option('siteurl').'/wp-admin/profile.php">'.$user_identity.'</a>'); ?> <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Ausloggen bzw. Abmelden">Abmelden &raquo;</a></p>

<?php else : ?>

<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
<label for="author"><small>Name <?php if ($req) '(erforderlich)'; ?></small></label></p>

<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
<label for="email"><small>E-Mail (wird nicht veröffentlicht) <?php if ($req) '(erforderlich)'; ?></small></label></p>

<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Website</small></label></p>

<?php endif; ?>

<p>Folgende HTML-Tags sind erlaubt: <code><?php echo allowed_tags(); ?></code>.</p>

<p><textarea name="comment" id="comment" cols="55" rows="12" tabindex="4"></textarea></p>

<p><input name="submit" type="submit" id="submit" tabindex="5" value="<?php echo attribute_escape(__('Submit Comment')); ?>" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>

</form>

<?php endif; // Ende: wenn Registrierung erforderlich, aber man nicht eingeloggt ist ?>

<?php else : // Kommentare sind geschlossen ?>
<p>Tut mir Leid, aber die Kommentar-Funktion ist momentan deaktiviert.</p>
<?php endif; ?>

Auch innerhalb des Formulars gibt es eine Abfrage, ob der Kommentator schon angemeldet ist oder nicht. Wenn er nämlich angemeldet ist, werden die Felder mit dem Namen, der E-Mail-Adresse und der Website ausgeblendet. Wenn man allerdings nicht angemeldet ist, muss man diese Felder noch ausfüllen.

Das Kommentarformular

Der Rest des Formulars ist recht einfach nachzuvollziehen. Mit if($req) wird abgefragt, ob es erforderlich ist, dass ein Feld ausgefüllt wird bevor man einen Kommentar abgibt. Die Einstellungen dazu finden Sie unter "Einstellungen" » "Diskussion".

Die Funktion allowed_tags(); gibt eine Auflistung von HTML-Tags, die in den Kommentaren erlaubt sind.

do_action('comment_form', $post->ID); ist ein weiterer Template-Hook, welcher signalisiert, dass man sich hier innerhalb des Kommentarformulars befindet. Das ist u. a. für einige Plugins von Bedeutung, die ihre Funktionalität innerhalb des Formulars ausüben.

Ganz zum Schluss kommt die Meldung, dass die Kommentarfunktion für diesen Beitrag geschlossen ist.