WordPress 2.7 Commenti Nidificati e Paginati

28

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;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;amp;#8220;%s&amp;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;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;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&amp;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


1
Il 13 dicembre 2008, gfelice scrive:

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.

?

2
Il 13 dicembre 2008, wolly scrive:

nel file comments.php nel loop, leggi il tutorial e guarda dove è posizionato il wp_list_comments.

3
Il 14 dicembre 2008, matteo scrive:

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

4
Il 14 dicembre 2008, wolly scrive:

1) non l’ho ancora guardato ma credo di si

2) .bypostauthor dovrebbe essere la classe che crea da definire nel CSS.

5
Il 14 dicembre 2008, maxanima scrive:

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 ;-)

6
Il 14 dicembre 2008, wolly scrive:

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.

7
Il 14 dicembre 2008, Fabiano scrive:

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

8
Il 14 dicembre 2008, wolly scrive:

Fabiano per l’assistenza c’è il forum qui sei oltretutto OT.

9
Il 14 dicembre 2008, Fabiano scrive:

chiedo scusa

10
Il 15 dicembre 2008, maxanima scrive:

grazie wolly, comunque a me non da problemi per ora, casomai disattivarlo non succede niente ;-)

11
Il 15 dicembre 2008, wolly scrive:

in realtà se lo disattivi vai incontro ad altri problemi, sparizione di commenti, ordine sballato dei commenti ed altre amenità :-)

12
Il 15 dicembre 2008, maxanima scrive:

ussignor che catastrofe ;-) va bè, vedremo, ora corro sul forum perchè ho un problema con i feed ma di un altro blog ;-)

13
Il 16 dicembre 2008, FX53 scrive:

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.

14
Il 16 dicembre 2008, wolly scrive:

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 :-)

15
Il 16 dicembre 2008, Carlo scrive:

Ora provo la modifica…

16
Il 1 gennaio 2009, Sergejpinka scrive:

Scusa, per quel poco di PHP che conosco, il codice corretto è:

<?php

e non

<? php

o sbaglio?

17
Il 9 gennaio 2009, Traffyk scrive:

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.

18
Il 11 febbraio 2009, Giorgio Taverniti scrive:

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.

:)

19
Il 11 febbraio 2009, wolly scrive:

@Giorgio è un bug già risolto, prima c’era la patch ma ora che è uscita la 2.7.1 basta aggiornare.
ciao

20
Il 11 febbraio 2009, Giorgio Taverniti scrive:

Grazie Wolly per la notizia :)

Provo a controllare se riesco in qualche modo a fare la paginazione con i numeri.

21
Il 11 luglio 2009, Pezzi di ricambio scrive:

Dopo ore di navigazione sono riuscito a trovare quello che mi interessava, ho letto il tuo articolo e l’ho trovato interessante.
Grazie Claudio

22
Il 7 gennaio 2010, Franco scrive:

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

23
Il 2 giugno 2010, fil scrive:

Scusate ma questa guida vale anche per wp 2.9.2?

Trackback/Pingback

Scrivi un tuo commento