() translation by (you can also view the original English article)
WordPress scheint heutzutage überall zu sein, und es ist kein Wunder, dass es einfach zu bedienen und anzupassen ist. In diesem Tutorial werde ich die Kommentare.php-Struktur des Standard-WordPress-Themas analysieren und Ihnen verschiedene Codeausschnitte geben, um das Skinnen zu vereinfachen.
Als Referenz habe ich auch ein kleines Inhaltsverzeichnis beigefügt.
- Das PHP-Backend
- Allgemeiner Code
- Anzeigen der Kommentare
- Das Kommentarformular
- Einige kleine Tricks
- Abschluss
1. Das PHP-Backend
1 |
<?php if(!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) : ?> |
2 |
<?php endif; ?> |
3 |
|
4 |
<?php if(!empty($post->post_password)) : ?> |
5 |
<?php if($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?> |
6 |
<?php endif; ?> |
7 |
<?php endif; ?> |
8 |
|
9 |
<?php if($comments) : ?> |
10 |
<?php foreach($comments as $comment) : ?> |
11 |
<?php if ($comment->comment_approved == '0') : ?> |
12 |
<?php endif; ?> |
13 |
<?php endforeach; ?> |
14 |
<?php else : ?> |
15 |
<?php endif; ?> |
16 |
|
17 |
<?php if(comments_open()) : ?> |
18 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
19 |
<?php else : ?> |
20 |
<?php if($user_ID) : ?> |
21 |
<?php else : ?> |
22 |
<?php endif; ?> |
23 |
<?php endif; ?> |
24 |
<?php else : ?> |
25 |
<?php endif; ?> |
26 |
Das ist der rohe PHP-Code, mit dem Ihre Datei comments.php funktioniert. Für einen Anfänger mag dies einschüchternd aussehen. Keine Sorge: Mit diesem Tutorial wird alles in Ihrer Kommentardatei kristallklar!
2. Allgemeiner Code
Verhindern des direkten Zugriffs auf comment.php
1 |
<?php if(!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) : ?> |
2 |
<?php endif; ?> |
Diese Codezeile verhindert, dass Benutzer versehentlich die Datei comment.php anzeigen. Diese Seite soll in eine Post-Seite aufgenommen werden, nicht separat. Sie könnten dies als Sicherheitsmaßnahme betrachten. Innerhalb der Anweisung können Sie jede Nachricht einfügen, die der Person angezeigt werden soll, die die Datei comment.php anzeigt, vorzugsweise eine die
-Anweisung.
1 |
<?php if(!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) : ?> |
2 |
<?php die('You can not access this page directly!'); ?> |
3 |
<?php endif; ?> |
Ist ein Passwort erforderlich?
1 |
<?php if(!empty($post->post_password)) : ?> |
2 |
<?php if($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?> |
3 |
<?php endif; ?> |
4 |
<?php endif; ?> |
Diese Anweisung (naja, eigentlich 2, aber es ist sinnvoller, wenn Sie sie als eine betrachten) prüft, ob ein Passwort erforderlich ist, um den Beitrag anzuzeigen. Wenn Sie nicht über das Passwort zum Anzeigen des Beitrags verfügen, dürfen Sie die Kommentare natürlich auch nicht anzeigen.
Das erste if
prüft, ob ein Passwort festgelegt ist. Die zweite if
-Anweisung prüft, ob ein Cookie mit einem Kennwort vorhanden ist, und zeigt die entsprechende Meldung an, wenn es nicht vorhanden ist. Sie können die Fehlermeldung anpassen, indem Sie alles, was Sie auswählen, in die zweite if
-Anweisung einfügen.
3. Anzeigen der Kommentare
1 |
<?php if($comments): ?> |
2 |
<?php foreach ($comments as $comment) : ?> |
3 |
<?php if ($comment->comment_approved == '0') : ?> |
4 |
<?php endif; ?> |
5 |
<?php endforeach; ?> |
6 |
<?php else : ?> |
7 |
<?php endif; ?> |
Diese erste bedingte Anweisung (if($comment)
) prüft, ob Kommentare vorhanden sind, und durchläuft sie dann mit einer foreach
-Anweisung. In der foreach
-Anweisung wird die folgende bedingte Anweisung angezeigt: if($comment->comment_approved == '0')
. Dies prüft, ob der Kommentar genehmigt wurde, und zeigt eine Meldung an, wenn er noch nicht genehmigt wurde.
Ein Beispiel hierfür wäre der folgende Code.
1 |
<?php if($comments) : ?> |
2 |
<ol> |
3 |
<?php foreach($comments as $comment) : ?> |
4 |
<li> |
5 |
<?php if($comment->comment_approved == '0') : ?> |
6 |
<p>Your comment is awaiting approval</p> |
7 |
<?php endif; ?> |
8 |
<p>Your comment</p> |
9 |
</li> |
10 |
<?php endforeach; ?> |
11 |
</ol> |
12 |
<?php else : ?> |
13 |
<p>No comments</p> |
14 |
<?php endif; ?> |
Grundlegende Tags für Kommentarvorlagen
Um dies zu einem funktionalen Code zu machen, müssen Sie die von WordPress bereitgestellten Vorlagen-Tags verwenden.
Vorlagen-Tag | Beschreibung |
---|---|
<?php comment_ID(); ?> | die ID eines Kommentars |
<?php comment_author(); ?> | der Autor eines Kommentars |
<?php comment_author_link(); ?> | der Autor eines Kommentars, der mit einem Link zu seiner Website versehen ist, falls er einen angegeben hat |
<?php comment_type(); ?> | die Art des Kommentars; Pingback, Trackback oder ein Kommentar |
<?php comment_text(); ?> | der eigentliche Kommentar |
<?php comment_date(); ?> | das Datum, an dem es veröffentlicht wurde |
<?php comment_time(); ?> | die Zeit, als es gepostet wurde |
Das Endergebnis
1 |
<?php if($comments) : ?> |
2 |
<ol> |
3 |
<?php foreach($comments as $comment) : ?> |
4 |
<li id="comment-<?php comment_ID(); ?>"> |
5 |
<?php if ($comment->comment_approved == '0') : ?> |
6 |
<p>Your comment is awaiting approval</p> |
7 |
<?php endif; ?> |
8 |
<?php comment_text(); ?> |
9 |
<cite><?php comment_type(); ?> by <?php comment_author_link(); ?> on <?php comment_date(); ?> at <?php comment_time(); ?></cite> |
10 |
</li> |
11 |
<?php endforeach; ?> |
12 |
</ol> |
13 |
<?php else : ?> |
14 |
<p>No comments yet</p> |
15 |
<?php endif; ?> |
Wenn Sie dies in comment.php einfügen, erhalten Sie eine geordnete Liste mit den Kommentaren und den erforderlichen Informationen oder eine Meldung, dass keine Kommentare vorhanden sind.
4. Das Kommentarformular
Folgen Sie mir immer noch? Gut! Wir sind fast da. Wir müssen nur das Kommentarformular verarbeiten... Okay, vielleicht habe ich gelogen, weil ich fast da war. Das Kommentarformular ist tatsächlich einer der schwierigeren Teile der gesamten Skin-Datei comments.php.
Sie werden mit mehreren bedingten Anweisungen bombardiert (ist eine Anmeldung erforderlich, sind Sie angemeldet, ...). In diesem Teil haben die meisten Start-Skinner die größten Probleme: Durch falsches Platzieren von Formularelementen kann verhindert werden, dass das Formular überhaupt funktioniert, ohne dass ein bestimmter PHP-Fehler auftritt.
Um Ihnen einen Einblick in die bedingten Anweisungen zu geben, die im Kommentarformular enthalten sind, werde ich zuerst diese Anweisungen erläutern und später den HTML-Code einfügen, um zu erklären, warum er dort sein sollte, wo er ist.
Übersicht über bedingte Anweisungen
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<?php else : ?> |
4 |
<?php if($user_ID) : ?> |
5 |
<?php else : ?> |
6 |
<?php endif; ?> |
7 |
<?php endif; ?> |
8 |
<?php else : ?> |
9 |
<?php endif; ?> |
Die erste bedingte Anweisung, auf die Sie stoßen, ist <?php if(comments_open()) : ?>
. Dies prüft grundsätzlich, ob die Kommentare offen sind. Wenn die Kommentare geschlossen sind, können Sie natürlich keinen Kommentar veröffentlichen und das Kommentarformular wird nicht benötigt. Sie können die Nachricht einfügen, die angezeigt werden soll, wenn die Kommentare zwischen dem letzten <?php else : ?>
Und geschlossen sind<?php endif; ?>
.
Die zweite bedingte Anweisung (<?php if (get_option('comment_registration') && !$user_ID) : ?>
) Überprüft, ob Sie registriert sein müssen, um einen Kommentar zu veröffentlichen, und ob Sie angemeldet sind. Wenn die bedingte Anweisung erfüllt ist, sollte das Skript einen Link zu einem Ort anzeigen, an dem sich Benutzer anmelden können. Wenn keine Registrierung erforderlich ist oder Sie bereits angemeldet sind, fährt das Skript mit dem else
Teil fort und zeigt das Formular an.
Unsere letzte bedingte Erklärung prüft dann, ob Sie angemeldet sind oder nicht. Wenn Sie bereits angemeldet sind, ist es natürlich sinnlos, Ihren Namen, Ihre E-Mail-Adresse und Ihre Website erneut einzugeben.
Formular einfügen
Herzlichen Glückwunsch, wir haben alle bedingten Anweisungen in der Datei comments.php durchgearbeitet. Jetzt müssen Sie nur noch das Formular hinzufügen.
Das erste, was ich hören kann, ist: Wo zum Teufel wird diese Form anfangen? Nun, Sie müssen nur dem gesunden Menschenverstand folgen. Die zweite bedingte Anweisung prüft, ob Sie angemeldet sein müssen oder nicht. Daher müssen Sie erst nach dieser Anweisung ein Formular anzeigen. Somit befindet sich das gesamte Formular innerhalb dieser bedingten Anweisung.
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p><?php else : ?> |
4 |
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> |
5 |
<?php if($user_ID) : ?> |
6 |
<?php else : ?> |
7 |
<?php endif; ?> |
8 |
</form> |
9 |
<?php endif; ?> |
10 |
<?php else : ?> |
11 |
<p>The comments are closed.</p> |
12 |
<?php endif; ?> |
Ich habe auch den Link zur Anmeldeseite eingefügt, so wie ich ihn in der Standard comments.php gefunden habe. Wie ich bereits sagte, prüft die letzte bedingte Anweisung, ob Sie angemeldet sind oder nicht. Offensichtlich werden die Eingabefelder für Name, E-Mail und Website nur angezeigt, wenn Sie nicht angemeldet sind. Lass sie uns da reinwerfen!
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p><?php else : ?> |
4 |
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> |
5 |
<?php if($user_ID) : ?> |
6 |
<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Log out »</a></p> |
7 |
<?php else : ?> |
8 |
<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" /> |
9 |
<label for="author"><small>Name <?php if($req) echo "(required)"; ?></small></label></p> |
10 |
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" /> |
11 |
<label for="email"><small>Mail (will not be published) <?php if($req) echo "(required)"; ?></small></label></p> |
12 |
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" /> |
13 |
<label for="url"><small>Website</small></label></p> |
14 |
<?php endif; ?> |
15 |
</form> |
16 |
<?php endif; ?> |
17 |
<?php else : ?> |
18 |
<p>The comments are closed.</p> |
19 |
<?php endif; ?> |
In Ordung! Wir sind fast da! Wir müssen nur einige einfache Codezeilen hinzufügen, z. B. einen Textbereich und eine Schaltfläche zum Senden. Diese folgen nach der letzten bedingten Anweisung, da es für diese Elemente irrelevant ist, ob Sie angemeldet sind oder nicht.
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p><?php else : ?> |
4 |
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> |
5 |
<?php if($user_ID) : ?> |
6 |
<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Log out »</a></p> |
7 |
<?php else : ?> |
8 |
<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" /> |
9 |
<label for="author"><small>Name <?php if($req) echo "(required)"; ?></small></label></p> |
10 |
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" /> |
11 |
<label for="email"><small>Mail (will not be published) <?php if($req) echo "(required)"; ?></small></label></p> |
12 |
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" /> |
13 |
<label for="url"><small>Website</small></label></p> |
14 |
<?php endif; ?> |
15 |
<p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p> |
16 |
<p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" /> |
17 |
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" /></p> |
18 |
<?php do_action('comment_form', $post->ID); ?> |
19 |
</form> |
20 |
<?php endif; ?> |
21 |
<?php else : ?> |
22 |
<p>The comments are closed.</p> |
23 |
<?php endif; ?> |
Dieser Code sollte ziemlich selbsterklärend sein. Ein Textfeld für den Kommentar, eine Schaltfläche zum Senden, ein verstecktes Eingabefeld mit der zukünftigen ID des Kommentars und einem PHP-Snippet (<?php do_action('comment_form', $post->ID); ?>
) WordPress erfordert, dass das Kommentarformular funktioniert.
Voila! Das war's Leute! Sie haben jetzt Ihre vollständig fertige Datei comments.php. Zeigen Sie diese Datei an, um den gesamten erforderlichen PHP- und HTML-Code abzurufen. Sie sollten am Ende damit fertig sein (ich habe einfach die kommentar.php-Datei des Standard-Skins durch unsere ersetzt und ein kleines Styling hinzugefügt.)



5. Einige kleine Tricks
Natürlich haben Sie jetzt nur eine grundlegende Datei "comments.php". Es gibt Unmengen von Dingen, die Sie tun können, um es weiter zu verbessern. Ich werde einige kleine Tipps und Tricks auflisten, die Ihnen auf Ihrem Weg helfen sollen.
Gravatars
Ab WordPress 2.5 gibt es ein benutzerdefiniertes WordPress-Template-Tag zum Einbetten von Gravataren. Es zieht den Gravatar aus der E-Mail, die der Besucher eingegeben hat. Der Code dafür ist sehr einfach.
1 |
<?php echo get_avatar($author_email, $size, $default_avatar ); ?> |
Sie können $author_email
durch die raffinierte get_comment_author_email()
ersetzen. Funktion: $size
ist die Höhe (und Breite) des Avatars und $default_avatar
ist ein Link zum Standard-Avatar-Bild (wird angezeigt, wenn der Kommentator kein Gravatar hat).
Fügen Sie diesen Code in die foreach
-Schleife ein, in der die Kommentare angezeigt werden. Die Ausgabe ist ein Bild mit den Klassen avatar
und avatar- $size
(wobei $size
die von Ihnen angegebene Größe ist). Mit einigen geringfügigen CSS-Bearbeitungen könnten Sie Folgendes erreichen:



Kommentarnummern
Ich habe absichtlich Überschriften in der später erstellten Datei comment.php weggelassen, da ich glaubte, dass sie in einem Lernprozess, der so schwierig wie er ist, zu überschüssigem Code führen würden. Natürlich vergesse ich sie nicht.
Normalerweise haben Leute eine Überschrift, die etwas Ähnliches wie "3 Kommentare bisher" anzeigt. Dies ist dank der von WordPress angebotenen Vorlagen-Tags sehr einfach zu erreichen.
1 |
<?php comments_number($zero_comments, $one_comment, $more_comments); ?> |
Es ist ziemlich selbsterklärend: $zero_comments
ist der Text, der angezeigt wird, wenn keine Kommentare vorhanden sind, $one_comment
, wenn ein Kommentar vorhanden ist, und $more_comments
, wenn mehrere Kommentare vorhanden sind. Ein Beispiel aus dem wirklichen Leben wäre wie folgt:
1 |
<?php comments_number('No comments', 'One comment', '% comments'); ?> |
Ich habe %
für mehrere Kommentare verwendet, da die Funktion comment_number
dann %
durch die Anzahl der Kommentare ersetzt (2, 3, …).
Wenn Sie diese in unserer Datei "comments.php" verwenden, erhalten Sie am Ende Folgendes:



Kommentar-Links
Um einen Link zum Kommentarteil anzuzeigen (wobei auch die Anzahl der Kommentare angezeigt wird), verwenden Sie einfach den folgenden Code.
1 |
<?php comments_popup_link($zero_comments, $one_comment, $more_comments, $css_class, $comments_closed); ?> |
Die ersten 3 Parameter in dieser Funktion sind dieselben wie in der obigen Funktion comments_number
. $css_class
ist offensichtlich die CSS-Klasse, die Sie dem <a>
-Tag geben, und $comment_closed
ist der Text, der angezeigt werden soll, wenn die Kommentare geschlossen werden. Wenn Sie dies auf ein Thema anwenden, können Sie es auf diese Weise verwenden.
1 |
<?php comments_popup_link('No comments', 'One comment', '% comments', 'comments-link', 'Comments are closed'); ?> |
Dies würde Ihnen dann einen Link mit dem Klassen comments-link
geben
Kommentare bearbeiten
Manchmal möchten Sie sofort einen Kommentar bearbeiten. Glücklicherweise können Sie mit der Funktion edit_comment_link einfach zur richtigen Seite gehen, um sie zu bearbeiten, anstatt zu Ihrem Admin-Bereich navigieren zu müssen, um diesen Kommentar endgültig zu erreichen. Die Verwendung ist als solche:
1 |
<?php edit_comment_link($link_text, $before_link, $after_link); ?> |
Sie müssen dies in die foreach
-Kommentarschleife einfügen. Die Parameter liegen auf der Hand: $link_text
ist der Ankertext für den Bearbeitungslink, $before_link
und $after_link
sind der Text oder Code, der vor oder nach dem Link angezeigt werden soll.
Dies macht es wirklich einfach, einen Kommentar zu ändern. Sie können einfach einen kleinen Link "Bearbeiten" zu Ihren Kommentar-Metainformationen hinzufügen (nur für den Administrator sichtbar). So könnte es aussehen:



Wechselnde Farben für Kommentare
Möglicherweise möchten Sie für Ihre Kommentare abwechselnde Zeilenfarben, um eine klarere Trennung zu erzielen. Dies ist relativ einfach. Fügen Sie zunächst den folgenden Code oben auf der Seite hinzu:
1 |
function alternate_rows($i){ if($i % 2) { echo ' class="alt"'; } else { echo ''; } |
2 |
} |
Fügen Sie dann (erneut) Folgendes in die foreach
-Schleife ein. Sie können einfach <li id="comment-<?php comment_ID(); ?>">
Durch Folgendes ersetzen:
1 |
<?php $i++; ?> |
2 |
<li<?php alternate_rows($i); ?> id="comment-<?php comment_ID(); ?>"> |
Dadurch erhält jeder zweite Kommentar die Klasse alt
, sodass das Erscheinungsbild über CSS geändert werden kann.
Ich habe beschlossen, eine Funktion dafür zu erstellen, um weniger Unordnung in Ihrer eigentlichen Themendatei zu haben. Sie können die Funktionsdefinition in Ihre Datei functions.php einfügen, wenn Sie möchten, aber für mich ist es sinnvoller, sie oben auf Ihrer Seite zu haben.
Abwechselnde Zeilen erleichtern die Unterscheidung verschiedener Kommentare. Einmal implementiert, haben Sie möglicherweise Folgendes:



Anzeigen der zulässigen Tags
Verwenden Sie einfach diesen kleinen Ausschnitt, um den Code anzuzeigen, den Besucher in ihren Kommentaren verwenden dürfen.
1 |
Allowed tags: <?php echo allowed_tags(); ?> |
Dann erhalten Sie einfach eine Liste der Tags, die in Ihren Kommentaren zulässig sind, wie folgt:
Kommentare RSS-Link
Um einen Link zum RSS-Feed für die Kommentare eines bestimmten Beitrags zu erhalten, fügen Sie einfach den folgenden Code an der gewünschten Stelle in Ihre Datei "comments.php" ein.
1 |
<?php comments_rss_link($link_text); ?> |
Ersetzen Sie dann einfach $link_test
durch den Ankertext für den RSS-Link.
Dies kann nützlich sein, wenn Sie Ihren Besuchern die Möglichkeit geben möchten, den Kommentar-Feed für einen bestimmten Artikel oder Blog-Beitrag zu abonnieren. Sie könnten es so implementieren:



6. Abschluss
Ich hoffe, Ihnen hat dieser kleine Artikel über das Enthäuten Ihrer WordPress-Datei kommentars.php gefallen. Den vollständigen Code erhalten Sie hier mit den darin gezeigten Tricks:
- Gravatars,
- alternative Zeilenfarben,
- Link bearbeiten,
- Kommentare RSS-Link.
Offensichtlich ist der Kommentar-Link nicht enthalten, da dieser innerhalb der Schleife verwendet werden muss.
Viel Glück bei Ihren WordPress-Skinning-Abenteuern!