Un modo per aumentare l'interazione dei visitatori è premiare i loro commenti mostrandoli sul tuo sito web. Inoltre, puoi anche mettere in evidenza i migliori commentatori, collegandoti al loro sito web. Qui creeremo un modello di pagina dedicato per visualizzare commenti e commentatori in un unico posto.
In breve, questo tutorial ti insegnerà come:
- creare un modello di pagina,
- utilizzare query SQL nel tuo codice per recuperare commenti con parametri variabili,
- creare una sezione della pagina visibile solo all'amministratore,
- aggiungere il supporto per un plugin correlato ai commenti.
Creazione di un modello di pagina
Il modo più semplice per creare un modello di pagina è aprire il file page.php nel tuo tema, che apparirà più o meno così:
<?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(); ?>
Copia e incolla il contenuto di page.php e aggiungi questo all'inizio:
<?php /* Template Name: Comments Central */ ?>
e salvalo. Non ci sono regole vere e proprie per nominare un file modello di pagina, ma è una buona idea usare un prefisso per renderlo riconoscibile, ad esempio "pt-comment-central.php". Non abbiamo ancora aggiunto nulla a questo modello di pagina, ma è attivo e selezionabile nell'area della dashboard di scrittura di una nuova pagina.
Recupero dei commenti
Per questo modello di pagina, presenteremo quattro aspetti diversi dei commenti:
- Commenti recenti,
- Trackback / Pingback recenti,
- Migliori commentatori,
- Post più commentati,
Innanzitutto, faremo Commenti Recenti:
<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>
La query SQL richiede tutti i commenti approvati ordinati per data (dal più recente). $max è dove impostiamo il numero di commenti da recuperare, 7 nel nostro caso. L'output del codice sopra sarà un elenco non ordinato di commenti recenti:

Con un po' di CSS possiamo raddrizzarlo per farlo sembrare migliore:
#cc-recent-comments li {
width: 100%;
float: left;
list-style-type: none;
}
#cc-recent-comments li img {
float: left;
margin-top: -5px;
}

$template determina come verrà scritto il testo effettivo; si basa sul formato creato da WP Comment Remix, e puoi seguire quel link per saperne di più sulla sua personalizzazione (cerca 'token').
Successivamente ci sono Pingback / Trackback Recenti:
<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>
Il codice sopra è molto simile a quello che abbiamo per i Commenti Recenti, le uniche differenze sono che ora stiamo richiedendo commenti con 'comment_type' sotto 'pingback' / 'trackback', e anche il modello è leggermente diverso. Risultato:

Ecco il codice per Migliori Commentatori:
<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>
Niente di troppo strabiliante. Nota però la fantastica funzione get_avatar(), che ti darà il Gravatar per chiunque il cui indirizzo email specifichi. In questo caso, recuperiamo l'immagine dell'avatar usando l'indirizzo email del commentatore. Con un CSS simile a quello che abbiamo per i commenti recenti, possiamo ottenere questo risultato:
#cc-top-commenters li {
width: 100%;
float: left;
list-style-type: none;
}
#cc-top-commenters li img {
float: left;
margin-top: -5px;
}

L'ultimo è Post più commentati:
<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>

E questo è tutto. Successivamente, aggiungeremo un po' di 'coolness' in più aggiungendo alcune cose che solo l'amministratore può vedere.
Informazioni solo per amministratori
Per mostrare informazioni solo per gli amministratori, possiamo usare questo snippet di codice da WPCandy:
<?php
global $user_ID;
if( $user_ID ) :
if( current_user_can('level_10') ) :
// admin-only stuff here.
endif;
endif; ?>
Ora sulla Dashboard, otteniamo una rapida panoramica del numero totale di commenti approvati, in attesa di revisione e spam di un sito. Replicamo questo per il nostro modello di pagina per un accesso più facile e riservato agli amministratori:
<?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() è una funzione utile che restituisce un array di vari numeri statistici sui commenti. Stiamo anche aggiungendo collegamenti alla rispettiva area di amministrazione dei commenti.
Aggiungere Alcune Scintille
Infine, supponiamo che tu trovi dei fantastici plugin relativi ai commenti che desideri integrare in questo modello di pagina. Invece di aggiungere altro codice, aggiungiamo semplicemente il supporto per esso. Per questo esempio, userò il plugin Activity Sparks, che può “visualizzare un grafico in stile 'sparkline' nella tua barra laterale per indicare l'attività di post e/o commenti”. Mi sembra un'ottima idea.
Di solito, il file readme.txt di un plugin ti insegna come aggiungerlo ai file del tuo tema. Nel nostro caso, il codice potrebbe essere questo:
<?php
if(function_exists('activitysparks')) {
activitysparks(array('dataset'=>'legend','height_px'=>100,'width_px'=>600,'period'=>30, 'ticks'=>24));
}
?>

function_exists() verifica se una particolare funzione è disponibile; nel nostro caso, la funzione activitysparks, che sarà disponibile se il plugin è stato caricato e attivato. Se c'è, mostriamo il grafico. Altrimenti, il nostro modello di pagina non mostrerà nulla (ma continuerà a funzionare correttamente, senza errori).
Risultato ed Esempio
Un esempio di questo modello di pagina è disponibile qui. Utilizza i codici che vedi qui con alcune modifiche, principalmente per mantenere la struttura HTML coerente con il resto del sito web. L'intero codice per quel modello di pagina è disponibile su Pastebin.
Crediti e Letture Ulteriori
- I codici utilizzati per visualizzare i vari commenti recenti e i più popolari sono tratti dal plugin WP Comment Remix. Dai un'occhiata al suo codice per imparare altre cose da fare con i commenti, come escludere i commenti dell'amministratore dai commentatori più popolari o come tenere conto solo dei commenti recenti. Il
$templateche usiamo per formattare l'output può essere appreso ulteriormente da quella pagina, troppo. - Creare il tuo modello di pagina sul Codex di WordPress.
- Tutorial sulla visualizzazione di contenuti solo per amministratori su WPCandy.
bene
Ottimo tutorial Hafiz!
E se non sbaglio questo è il primo post ospite? se sì, woot!
Forse sarò il prossimo 😛
Sicuramente ci sono cose qui che voglio implementare sul mio photoblog una volta che lo avrò convertito in WordPress. Grazie!
Ciao Kim, fantastico. Facci sapere come funziona una volta che lo implementi.
Ottima idea, potrei implementare qualcosa di simile per il mio sito.
Solo per informazione: invece di eseguire query dirette, prova a usare questo:
include ( ABSPATH . ‘wp-admin/includes/template.php’ );
_wp_get_comment_list( ‘approved’, false, 0, 20, 0, ‘comment’ );
Ciao Ptah, sono contento che l'hai trovato utile. Stavo effettivamente pensando di implementare una pagina simile anche qui perché penso che sia un buon modo per "premiare" i buoni commentatori.
E grazie per il suggerimento sulle query SQL dirette. Presumo che ciò possa essenzialmente sostituire qualsiasi istanza di codice come questa?
$sql = "SELECT p.*, ..."; // e così via$results = $wpdb->get_results($sql);
Esatto,
_wp_get_comment_list()restituisce un array di tutti i commenti, quindi da lì, eseguiresti semplicemente un ciclo foreach.Imparo qualcosa di nuovo ogni giorno. Darò un'occhiata approfondita a quella funzione, grazie Ptah 🙂