Separare i commenti da ping/trackback in WordPress 2.7, 2.8 e superiori
Una delle cose che non apprezzo granché di WordPress è il modo che ha di gestire insieme commenti e pings (trackbackW e pingbackW), come se fossero parte dello stesso flusso di reazioni ad un articolo. Così, dopo aver visto in giro numerosi siti in cui questi due elementi venivano invece separati in due flussi distinti, ho deciso di mettermi a cercare una soluzione per ottenere lo stesso risultato.
…e non è stato mica facile! Ho dovuto penare un po’ per trovare il modo di separare i commenti dei post dai pingback/trackback con le ultime versioni di WordPress. Dalla versione 2.7 in poi, infatti, il codice che compone il file comments.php (responsabile dell’inserimento e della visualizzazione dei commenti e dei trackback/pingback negli articoli) è stato radicalmente riscritto, rendendo così inutili molti dei tutorial sull’argomento già pubblicati in Rete (e plugin analoghi).
Gira che ti rigira, ho trovato questa guida (in inglese) che spiega proprio come ottenere il risultato e ho pensato di tradurne i pochi, semplici passaggi per il pubblico italiano. Eccoli di seguito.
Rimuovere pingback/trackback
La prima cosa da fare è escludere i ping dal flusso dei commenti. Apriamo dunque il file single.php (quello che regola la visualizzione dei singoli post) e sostituiamo la seguente stringa:
<?php comments_template(); ?>
con:
<?php comments_template('', true); ?>
Salviamo le modifiche e apriamo ora il file comments.php. Qui, cerchiamo la stringa:
<?php if ( have_comments() ) : ?>
e aggiungiamo immediatamente dopo:
<?php if ( ! empty($comments_by_type['comment']) ) : ?>
Quindi, sempre nel file comments.php, sostituiamo questo:
<?php wp_list_comments(); ?>
con questo:
<?php wp_list_comments('type=comment'); ?>
Appena sotto la funzione wp_list_comments che abbiamo appena modificato, dovrebbe esserci un tag </ol>. Subito dopo, dobbiamo aggiungere:
<?php endif; ?>
Così facendo, eviteremo che l’intestazione dei commenti e i tag <ol> (che generano le liste numerate) vengano visualizzati nel caso in cui non ci siano commenti all’articolo, ma solo pingback e/o trackback. Ok, fino a qui non dovrebbe essere stato troppo difficile. Ora viene il bello.
Mostrare i ping in un elenco a parte
Per visualizzare pingback e trackback in un elenco a se stante, dobbiamo aggiungere il seguente codice subito dopo l’endif che abbiamo inserito poco fa:
<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="pings">Trackbacks/Pingbacks</h3>
<ol class="commentlist">
<?php wp_list_comments('type=pings'); ?>
</ol>
<?php endif; ?>
Fatto? Ottimo. Da ora in poi i ping verranno visualizzati in un elenco a parte, dopo i normali commenti. Ma appariranno come commenti veri e propri, con il testo e tutto il resto, mentre noi vogliamo che appaiano come un semplice elenco numerato fatto solo di titoli cliccabili. Quindi, dovremo fare ancora un paio di piccole operazioni.
Un tocco di stile per trackback e pingback
Apriamo il file functions.php e inseriamo il codice seguente:
<?php
function list_pings($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
?>
<li id="comment-<?php comment_ID(); ?>"> <?php comment_author_link(); ?>
<?php } ?>
Quindi, torniamo al nostro file comments.php e sostituiamo queste due righe:
<ol class="commentlist">
<?php wp_list_comments('type=pings'); ?>
Con le seguenti:
<ol>
<?php wp_list_comments('type=pings&callback=list_pings'); ?>
Fatto questo potremmo anche aver concluso. Ma c’è un’ultima, piccola modifica che possiamo apportare: serve a mostrare, nel conto dei commenti ad un articolo, il solo conteggio dei commenti veri e propri, escludendo i ping. Basta inserire nel file functions.php ciò che segue:
<?php
add_filter('get_comments_number', 'comment_count', 0);
function comment_count( $count ) {
if ( ! is_admin() ) {
global $id;
$comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));return count($comments_by_type['comment']);
} else {return $count;
}
}
?>
E con questo è davvero tutto. Tutte le modifiche descritte in questo articolo sono state testate (e probabilmente sono ancora in uso) su questo stesso blog senza alcun problema ma, qualora voi doveste incontrare difficoltà, fatemi pure un fischio nei commenti.
Articoli correlati:
- L’aggiornamento di WordPress ha la memoria corta
A partire dalla versione 2.8, ad ogni update di WordPress mi ritrovo sempre con lo stesso problema: dopo l’aggiornamento – che... - WordPress: update a 2.8 ed errore nella dashboard “Allowed Memory Size… exhausted”. Ecco come risolverlo
Scopro sul blog di Camu la soluzione ad un problema riscontrato immediatamente dopo l’aggiornamento all’ultima release di WordPress, la 2.8....
Tags: Wordpress
