Con WordPress 2.7 sono stati introdotti i commenti nidificati e paginati modificando e semplificando il loop dei commenti.
La prima cosa da fare è aprire il file del nostro tema header.php e cercare
< ?php wp_head(); ?>
Inserite nella riga prima :
< ?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>
Salvate il fie.
Ora passiamo al template dei commenti, personalmente vi suggerisco di evitare di andare a modificare il file comments.php del vostro tema perchè la nuova funzione
wp-list_comments
racchiude in se tutte le funzionalità e crea diverse nuove classi che dovranno essere definite nel vostro style.css.
Rinominate il file comments.php in comments.old e copiate nella cartella del vostro tema il file comments.php del tema standard.
Analizziamo le varie parti del nuovo comments.php
< ?php // Do not delete these lines
if (isset($_SERVER['SCRIPT_FILENAME']) &amp;amp;amp;amp;&amp;amp;amp;amp; 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
die ('Please do not load this page directly. Thanks!');
if ( post_password_required() ) { ?>
<p class="nocomments">< ?php _e('This post is password protected. Enter the password to view comments.', 'kubrick'); ?></p>
< ?php
return;
}
?>
Questo è il nuovo codice per la gestione dei post protetti da password.
Questo invece come si presenta il nuovo loop dei commenti
< ?php if ( have_comments() ) : ?>
<h3 id="comments">< ?php comments_number(__('No Responses', 'kubrick'), __('One Response', 'kubrick'), __('% Responses', 'kubrick'));?> < ?php printf(__('to &amp;amp;amp;amp;#8220;%s&amp;amp;amp;amp;#8221;', 'kubrick'), the_title('', '', false)); ?></h3>
<div class="navigation">
<div class="alignleft">< ?php previous_comments_link() ?></div>
<div class="alignright">< ?php next_comments_link() ?></div>
</div>
<ol class="commentlist">
< ?php wp_list_comments();?>
</ol>
<div class="navigation">
<div class="alignleft">< ?php previous_comments_link() ?></div>
<div class="alignright">< ?php next_comments_link() ?></div>
</div>
< ?php else : // this is displayed if there are no comments so far ?>
< ?php if ('open' == $post->comment_status) : ?>
<!-- If comments are open, but there are no comments. -->
< ?php else : // comments are closed ?>
<!-- If comments are closed. -->
<p class="nocomments">< ?php _e('Comments are closed.', 'kubrick'); ?></p>
< ?php endif; ?>
< ?php endif; ?>
Per prima cosa controlla se ci sono commenti e se ci sono la funzione
wp-list_comments
gestisce tutto i vecchio ciclo foreach e racchiude tutti i dati del commento e crea tutte le classi necessarie per gravatar, data, nichname indirizzo web etc.
Se i commenti sono aperti
< ?php if ('open' == $post->comment_status) : ?>
ecco il box dei commenti
<div id="respond">
<h3>< ?php comment_form_title( __('Leave a Reply', 'kubrick'), __('Leave a Reply for %s' , 'kubrick') ); ?></h3>
<div id="cancel-comment-reply">
<small>< ?php cancel_comment_reply_link() ?></small>
</div>
< ?php if ( get_option('comment_registration') &amp;amp;amp;amp;&amp;amp;amp;amp; !$user_ID ) : ?>
<p>< ?php printf(__('You must be <a href="%s">logged in to post a comment.', 'kubrick'), get_option('siteurl') . '/wp-login.php?redirect_to=' . urlencode(get_permalink())); ?></p>
< ?php else : ?>
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
< ?php if ( $user_ID ) : ?>
<p>< ?php printf(__('Logged in as <a href="%1$s">%2$s.', 'kubrick'), get_option('siteurl') . '/wp-admin/profile.php', $user_identity); ?> <a href="<?php echo wp_logout_url(get_permalink()); ?>" title="< ?php _e('Log out of this account', 'kubrick'); ?>">< ?php _e('Log out &amp;amp;amp;amp;raquo;', 'kubrick'); ?></a></p>
< ?php else : ?>
<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?/>" size="22" tabindex="1" < ?php if ($req) echo "aria-required='true'"; ?> />
<label for="author"><small>< ?php _e('Name', 'kubrick'); ?> < ?php if ($req) _e("(required)", "kubrick"); ?></small></label></p>
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?/>" size="22" tabindex="2" < ?php if ($req) echo "aria-required='true'"; ?> />
<label for="email"><small>< ?php _e('Mail (will not be published)', 'kubrick'); ?> < ?php if ($req) _e("(required)", "kubrick"); ?></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>< ?php _e('Website', 'kubrick'); ?></small></label></p>
< ?php endif; ?>
<!--<p><small>< ?php printf(__('<strong>XHTML: You can use these tags: <code>%s</code>', 'kubrick'), allowed_tags()); ?></small>-->
<p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p>
<p><input name="submit" type="submit" id="submit" tabindex="5" value="<?php _e('Submit Comment', 'kubrick'); ?/>" />
< ?php comment_id_fields(); ?>
</p>
< ?php do_action('comment_form', $post->ID); ?>
</form>
< ?php endif; // If registration required and not logged in ?>
</div>
< ?php endif; // if you delete this the sky will fall on your head ?>
Ora passiamo ad inserire nel file style.css del vostro le classi che crea la funzione wp_list_comments (Pagina in aggiornamento ul codex ufficiale), vi crea le classi per alternare i commenti (per poterli avere differenti formattazioni da pari e dispari, per gestire la visualizzazione degli avatar, per gestire la formattazione dei vari livelli del tread e per tutto ciò che riguarda i commenti
.thread-alt {
background-color: #f8f8f8;
}
.thread-even {
background-color: white;
}
.depth-1 {
border: 1px solid #ddd;
}
.even, .alt {
border-left: 1px solid #ddd;
}
.commentlist li, #commentform input, #commentform textarea {
font: 0.9em 'Lucida Grande', Verdana, Arial, Sans-Serif;
}
.commentlist li ul li {
font-size: 1em;
}
.commentlist li {
font-weight: bold;
}
.commentlist li .avatar {
float: right;
border: 1px solid #eee;
padding: 2px;
background: #fff;
}
.commentlist cite, .commentlist cite a {
font-weight: bold;
font-style: normal;
font-size: 1.1em;
}
.commentlist p {
font-weight: normal;
line-height: 1.5em;
text-transform: none;
}
#commentform p {
font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif;
}
.commentmetadata {
font-weight: normal;
}
#commentform {
margin: 5px 10px 0 0;
}
#commentform input {
width: 170px;
padding: 2px;
margin: 5px 5px 1px 0;
}
#commentform textarea {
width: 100%;
padding: 2px;
}
#respond:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
#commentform #submit {
margin: 0 0 5px auto;
float: right;
}
/* Begin Comments*/
.alt {
margin: 0;
padding: 10px;
}
.commentlist {
padding: 0;
text-align: justify;
}
.commentlist li {
margin: 15px 0 10px;
padding: 5px 5px 10px 10px;
list-style: none;
}
.commentlist li ul li {
margin-right: -5px;
margin-left: 10px;
}
.commentlist p {
margin: 10px 5px 10px 0;
}
.children { padding: 0; }
#commentform p {
margin: 5px 0;
}
.nocomments {
text-align: center;
margin: 0;
padding: 0;
}
.commentmetadata {
margin: 0;
display: block;
}
/* End Comments */
Come potete vedere la gestione del loop dei commenti è decisamente semplificata ma, per aggiornare i temi è necessario un lavoro non indifferente sui CSS per dargli l’aspetto coerente al vostro tema, quindi armatevi di tanta pazienza, fate i backup dei vostri file e cominciate a lavorare
Come dividere i commenti dai pingback e dai trackback?
Niente di più semplice ora, utilizzando la funzione wp_list_comments:
<ol class="commentlist">
< ?php wp_list_comments('avatar_size=64&type=comment');?>
</ol>
<h3 id="pings">Trackbacks/Pingbacks</h3>
<ol class="commentlist">
< ?php wp_list_comments('type=pings'); ?>
</ol>
la funzione wp_list_comments() accetta molti parametri tra i quali il tipo di commento, in questo caso il codice che vedete è quello che potete vedere in funzione sul mio blog, c’è una prima OL dove imposto le dimensioni dell’avatar e gli dico di elencare solo i commenti e subito dopo una seconda OL dove invece gli dico di elencare solo i pings (trackback e pingback).
ATTENZIONE QUESTO CODICE NON E’ RETROCOMPATIBILE QUINDI SE VOLETE AVERE UN CODICE CHE FUNZIONI CON LE VECCHIE VERSIONI DI WORDPRESS E ANCHE CON LA 2.7 SEGUITE QUESTO TUTORIAL.






Commenti dei Lettori
Dove va inserito il codice per dividere i commenti dai pingback e dai trackback?
Cioè questo:
1.
2.
3.
4. Trackbacks/Pingbacks
5.
6.
7.
?
nel file comments.php nel loop, leggi il tutorial e guarda dove è posizionato il wp_list_comments.
Ottima guida!! Solo due domande…
1) E’ possibile numerare i commenti?
2) Per distinguere il commento dell’autore dell’articolo c’è qualcosa di nuovo? ho un po’ di difficoltà a capire come fare!!)
Matteo
1) non l’ho ancora guardato ma credo di si
2) .bypostauthor dovrebbe essere la classe che crea da definire nel CSS.
Io uso intensedebate per i commenti, faccio prima, funziona benissimo, è più bello graficamente e ha molte più opzioni….in più compatibile con wp 2.7
intense debate lo sconsiglio, funziona malissimo, è pieno di bug, perdete i commenti dal vostro blog, mette le date non sulle vostre impostazioni, duplica triplica i trackback e potrei continuare all’ininito.
io ho un grosso problema con i commenti, non riguarda la nidificazione ma la moderazione. continuo a ricevere email per approvare commenti che di per se non contengono ne link, ne parole censurate ne altro. l’80% dei commenti che arrivano non vengono automaticamente pubblicati, contrariamente a quanto è stato impostato nella relativa pagina “Discussione”
ho anche provato ad eliminare tutte le parole e gli ip da moderare, e nonstante abbia una lista completametne vuota, wordpress continua a mandarli in moderazione
Fabiano per l’assistenza c’è il forum qui sei oltretutto OT.
chiedo scusa
grazie wolly, comunque a me non da problemi per ora, casomai disattivarlo non succede niente
in realtà se lo disattivi vai incontro ad altri problemi, sparizione di commenti, ordine sballato dei commenti ed altre amenità
ussignor che catastrofe
va bè, vedremo, ora corro sul forum perchè ho un problema con i feed ma di un altro blog
Ciao!! volevo chiedervi ma questa modifica ai commenti del proprio tema è obbligatoria dopo aver installato la 2.7 ???? lo chiedo perché 1) non o riscontrato problemi ai commenti 2) dal post non si capisce il perché di questa modifica!! se necessari o opzionale!!. Chiedo scusa anticipatamente il mio non vuole essere una critica al post!! ma solamente un chiarimento se questa modifica è necessaria per non incappare in spiacevoli inconvenienti!! oppure se è facoltativa. Grazie e complimenti per l’aiuto.
la modifica non obbligatoria, la fai se vuoi avere i commenti nidifcati e paginati se invece ti va bene come li hai adesso non devi modificare nulla
Ora provo la modifica…
Scusa, per quel poco di PHP che conosco, il codice corretto è:
<?phpe non
<? phpo sbaglio?
Ragazzi forse c’è un errore di traduzione per:
#
#
Su next_comments_links mi esce commenti precedenti che è lo stesso che appare su previous_comments_links, mi date conferma per favore?
Tnx.
Oltre a segnalare quanto dice Traffyk, volevo dirvi che il permalink al singolo commento della prima pagina di un articolo è errato.
Mi stavo inoltre chiedendo che è possibile far spuntare i numeri della paginazione perchè altrimenti quando abbiamo 25 pagine di commenti l’utente deve cliccare 25 volte prima di arrivare all’ultima.
@Giorgio è un bug già risolto, prima c’era la patch ma ora che è uscita la 2.7.1 basta aggiornare.
ciao
Grazie Wolly per la notizia
Provo a controllare se riesco in qualche modo a fare la paginazione con i numeri.
Dopo ore di navigazione sono riuscito a trovare quello che mi interessava, ho letto il tuo articolo e l’ho trovato interessante.
Grazie Claudio
Intanto grazie delle spiegazioni, fix apportati. Ho pero’ un problema: con firefox visualizzo correttamente i gravatar, mentre con internet explorer non compaiono. Come sistemare? Via css?
Grazie
Scusate ma questa guida vale anche per wp 2.9.2?
Trackback/Pingback