Eine Möglichkeit, das Engagement der Besucher zu erhöhen, besteht darin, ihre Kommentare zu belohnen, indem Sie sie auf Ihrer Website präsentieren. Zusätzlich können Sie auch die Top-Kommentatoren hervorheben und dabei auf deren Website verlinken. Hier erstellen wir eine dedizierte Seitenvorlage, um diese Kommentare und Kommentatoren an einem Ort anzuzeigen.
Kurz gesagt, dieses Tutorial lehrt Sie, wie Sie:
- eine Seitenvorlage erstellen,
- SQL-Abfragen in Ihrem Code verwenden, um Kommentare mit unterschiedlichen Parametern abzurufen,
- einen Bereich der Seite erstellen, der nur für Administratoren sichtbar ist,
- Unterstützung für ein Kommentar-bezogenes Plugin hinzufügen.
Erstellen einer Seitenvorlage
Der einfachste Weg, eine Seitenvorlage zu erstellen, ist das Öffnen der Datei page.php in Ihrem Theme, die ungefähr so aussehen wird:
<?php get_header(); ?>
<div id="content">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h2 class="page_title"><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
<?php comments_template(); ?>
<?php endwhile; endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Kopieren Sie den Inhalt von page.php und fügen Sie ihn ganz oben ein:
<?php /* Template Name: Comments Central */ ?>
Und speichern Sie sie. Es gibt keine wirklichen Regeln für die Benennung einer Seitenvorlagendatei, aber es ist eine gute Idee, ein Präfix zu verwenden, um sie erkennbar zu machen, z. B. „pt-comment-central.php“. Wir haben dieser Seitenvorlage noch nichts hinzugefügt, aber sie ist einsatzbereit und im Dashboard-Bereich „Neue Seite schreiben“ auswählbar.
Kommentare abrufen
Für diese Seitenvorlage werden wir vier verschiedene Aspekte von Kommentaren hervorheben:
- Neueste Kommentare,
- Neueste Trackbacks / Pingbacks,
- Top-Kommentatoren,
- Meistkommentierte Beiträge,
Zuerst behandeln wir Neueste Kommentare:
<h3>Recent Comments</h3>
<ul id="cc-recent-comments">
<?php
$max = 7; // number item to get
global $wpdb;
$sql = "SELECT c.*, p.post_title FROM $wpdb->comments c INNER JOIN $wpdb->posts p ON (c.comment_post_id=p.ID) WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') ORDER BY comment_date DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '%g <a href="%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%ct','%cd','%g','%pt','%pu','%au','%an','%cid');
$replacements = array($row->comment_title,$row->comment_date,get_avatar($row->comment_author_email,'32'),$row->post_title,get_permalink($row->comment_post_ID),$row->comment_author_url,$row->comment_author,$row->comment_ID);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed = 1;
}
if ($echoed==0)
echo '<li>No comment found.</li>';
?>
</ul>
Die SQL-Abfrage fragt nach allen genehmigten Kommentaren, sortiert nach Datum (neueste zuerst). $max ist, wo wir die Anzahl der abzurufenden Kommentare festlegen, in unserem Fall 7. Die Ausgabe des obigen Codes ist eine unsortierte Liste der neuesten Kommentare:

Mit ein wenig CSS können wir das gerade rücken, damit es besser aussieht:
#cc-recent-comments li {
width: 100%;
float: left;
list-style-type: none;
}
#cc-recent-comments li img {
float: left;
margin-top: -5px;
}

$template bestimmt, wie der eigentliche Text geschrieben wird; dies basiert auf dem Format, das von WP Comment Remix erstellt wurde, und Sie können diesem Link folgen, um mehr über die Anpassung zu erfahren (suchen Sie nach „Tokens“).
Als Nächstes kommen Neueste Pingbacks / Trackbacks:
<h3>Recent Pingbacks / Trackbacks </h3>
<ul id="cc-recent-trackbacks">
<?php
$sql = "SELECT c.*, p.post_title FROM $wpdb->comments c INNER JOIN $wpdb->posts p ON (c.comment_post_id=p.ID) WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') ORDER BY comment_date DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '%g <a href="%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%ct','%cd','%g','%pt','%pu','%au','%an','%cid');
$replacements = array($row->comment_title,$row->comment_date,get_avatar($row->comment_author_email,'32'),$row->post_title,get_permalink($row->comment_post_ID),$row->comment_author_url,$row->comment_author,$row->comment_ID);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed=1;
}
if ($echoed==0)
echo '<li>No comment found.</li>';
?>
</ul>
Der obige Code ist dem für Neueste Kommentare sehr ähnlich, die einzigen Unterschiede sind, dass wir jetzt nach Kommentaren mit dem „comment_type“ unter „pingback“ / „trackback“ fragen und die Vorlage auch etwas anders ist. Ergebnis:

Hier ist der Code für Top-Kommentatoren:
<h3>Top Commenters</h3>
<ul id="cc-top-commenters">
<?php
$sql = "SELECT comment_author, comment_author_url, comment_author_email, count(comment_ID) as comment_count FROM $wpdb->comments WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') GROUP BY comment_author, comment_author_url, comment_author_email ORDER BY comment_count DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '<a href="%au">%g %an</a> (%c comments)';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%g','%au','%an','%c');
$replacements = array(get_avatar($row->comment_author_email,'32'),$row->comment_author_url,$row->comment_author,$row->comment_count);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed = 1;
}
if ($echoed==0)
echo '<li>No commenter found.</li>';
?>
</ul>
Nichts allzu Erstaunliches dort. Beachten Sie jedoch die coole Funktion get_avatar(), die Ihnen den Gravatar für jeden liefert, dessen E-Mail-Adresse Sie angeben. In diesem Fall rufen wir das Avatarbild mithilfe der E-Mail-Adresse des Kommentators ab. Mit CSS, das dem für die neuesten Kommentare ähnelt, können wir dieses Ergebnis erzielen:
#cc-top-commenters li {
width: 100%;
float: left;
list-style-type: none;
}
#cc-top-commenters li img {
float: left;
margin-top: -5px;
}

Zuletzt kommen Meistkommentierte Beiträge:
<h3>Most Commented Posts</h3>
<ul id="cc-most-comments">
$sql = "SELECT p.*, c.comment_count FROM $wpdb->posts p INNER JOIN (SELECT comment_post_id, count(comment_ID) as comment_count from $wpdb->comments WHERE comment_approved='1' GROUP BY comment_post_id) c ON (c.comment_post_id=p.ID) ORDER BY c.comment_count DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '<a href="%pu">%pt</a> (%c comments)';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%pd','%pt','%pu','%c');
$replacements = array($row->post_date,$row->post_title,get_permalink($row->ID),$row->comment_count);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed = 1;
}
if ($echoed==0)
echo '<li>No commenter found.</li>';
?>
</ul>

Und das ist alles. Als Nächstes fügen wir etwas zusätzliche Coolness hinzu, indem wir einige Dinge einbauen, die nur der Administrator sehen kann.
Nur für Administratoren bestimmte Informationen
Um Dinge nur für Administratoren anzuzeigen, können wir diesen Code-Schnipsel von WPCandy verwenden:
<?php
global $user_ID;
if( $user_ID ) :
if( current_user_can('level_10') ) :
// admin-only stuff here.
endif;
endif; ?>
Jetzt erhalten wir im Dashboard einen schnellen Überblick über die Gesamtzahl der Kommentare einer Website, die genehmigten, die zur Überprüfung anstehenden und die Spam-Kommentare. Lassen Sie uns dies für unsere Seitenvorlage für einfacheren, nur für Administratoren zugänglichen Zugriff replizieren:
<?php
$num_comm = wp_count_comments();
?>
Total Comments: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?"><?php echo $num_comm->total_comments; ?></a>
Approved: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=approved"><?php echo $num_comm->approved; ?></a>
Moderated: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=moderated"><?php echo $num_comm->moderated; ?></a>
Spam: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=spam"><?php echo $num_comm->spam; ?> </a>

wp_count_comments() ist eine praktische Funktion, die ein Array verschiedener Kommentarstatistiken zurückgibt. Wir fügen auch Links zum jeweiligen Kommentarverwaltungsbereich hinzu.
Einige Funken hinzufügen
Zuletzt, sagen wir, Sie finden ein cooles Kommentar-bezogenes Plugin, das Sie in diese Seitentempalte integrieren möchten. Anstatt mehr Code hinzuzufügen, fügen wir einfach Unterstützung dafür hinzu. Für dieses Beispiel entscheide ich mich für das Plugin Activity Sparks, das „ein Diagramm im Sparkline-Stil in Ihrer Seitenleiste anzeigen kann, das die Aktivität von Beiträgen und/oder Kommentaren anzeigt.“ Klingt für mich großartig.
Normalerweise erklärt die Readme.txt-Datei eines Plugins, wie Sie es in Ihre Theme-Dateien einfügen können. In unserem Fall kann der Code so aussehen:
<?php
if(function_exists('activitysparks')) {
activitysparks(array('dataset'=>'legend','height_px'=>100,'width_px'=>600,'period'=>30, 'ticks'=>24));
}
?>

function_exists() prüft, ob eine bestimmte Funktion verfügbar ist; in unserem Fall die Funktion activitysparks, die verfügbar ist, wenn das Plugin hochgeladen und aktiviert wurde. Wenn es vorhanden ist, zeigen wir das Diagramm an. Wenn nicht, zeigt unsere Seiten tempalte nichts an (aber sie läuft trotzdem einwandfrei, ohne Fehler).
Ergebnis und Beispiel
Ein Beispiel für diese Seiten tempalte ist hier verfügbar. Es verwendet den hier gezeigten Code mit einigen Modifikationen, hauptsächlich um die HTML-Struktur mit dem Rest der Website konsistent zu halten. Der gesamte Code für diese Seiten tempalte ist bei Pastebin verfügbar.
Credits und weiterführende Lektüre
- Die Codes zur Anzeige der verschiedenen aktuellen und Top-Kommentare stammen aus dem Plugin WP Comment Remix. Schauen Sie sich seinen Code an, um mehr über Kommentare zu erfahren, z. B. wie Administratorkommentare von Top-Kommentatoren ausgeschlossen werden oder wie nur aktuelle Kommentare berücksichtigt werden. Das
$template, das wir zur Formatierung der Ausgabe verwenden, kann ebenfalls von dieser Seite gelernt werden. - Erstellen Ihrer eigenen Seiten tempalte im WordPress Codex.
- Tutorial zur Anzeige von nur für Administratoren sichtbaren Inhalten auf WPCandy.
gut
Tolles Tutorial Hafiz!
Und wenn ich mich nicht irre, ist das der erste Gastbeitrag? Wenn ja, woot!
Vielleicht bin ich der Nächste 😛
Definitiv einige Dinge hier, die ich auf meinem Fotoblog implementieren möchte, sobald ich ihn auf WordPress umgestellt habe. Danke!
Hey Kim, großartig. Lass uns wissen, wie es funktioniert, sobald du es implementiert hast.
Tolle Idee, ich werde vielleicht etwas Ähnliches für meine Website implementieren.
Nur zur Info: Anstatt Rohabfragen durchzuführen, versuchen Sie Folgendes:
include ( ABSPATH . ‘wp-admin/includes/template.php’ );
_wp_get_comment_list( ‘approved’, false, 0, 20, 0, ‘comment’ );
Hey Ptah, ich freue mich, dass du es nützlich fandest. Ich habe tatsächlich darüber nachgedacht, hier auch eine ähnliche Seite zu implementieren, weil ich denke, dass es eine gute Möglichkeit ist, gute Kommentatoren zu „belohnen“.
Und danke für den Tipp bezüglich der Roh-SQL-Abfragen. Ich nehme an, das könnte im Wesentlichen jede Instanz von Code wie diese ersetzen?
$sql = "SELECT p.*, ..."; // und so weiter$results = $wpdb->get_results($sql);
Genau,
_wp_get_comment_list()gibt ein Array aller Kommentare zurück, also von dort würdest du einfach eine foreach-Schleife ausführen.Wieder etwas Neues gelernt. Ich werde mir diese Funktion genau ansehen, danke Ptah 🙂