WordPress: filtrate il contenuto dei commenti

Mi è capitato di dover sistemare un fastidioso problema su un blog WordPress: gli utenti lasciavano commenti con frasi lunghissime. Questo produceva la fuoriuscita del testo, sia nel backend che, ancor peggio, nel frontend. L’effetto era davvero orribile e, onde evitare di moderare a mano ogni singolo commento, l’unica soluzione era quella di filtrare – in qualche modo – l’output dei commenti.
Fortunatamente (ed è una delle ragione per cui tutto sommato adoro WP) WordPress permette di aggiungere un filtro all’output dei commenti. Nel mio caso è bastato aggiungere nel file functions.php le seguenti righe di codice:

1
2
3
4
5
6
7
8
9
10
11
12
function filter_comment($content) {
    $a = explode(" ", $content);
    $content = "";
    foreach($a as $word) {
        if(strlen($word) > 20) $word = substr($word, 0, 20) . "[t...]";
        $content .= ($content == "") ? $word: (" " . $word);
    }
    return $content;
}

add_filter('comment_text','filter_comment');
add_filter('get_comment_text ','filter_comment');

Le parole troppo lunghe (maggiori di 20) vengono tagliate e, alla fine, gli aggiungo [t...] – per indicare che è una parola tagliata.

2 commenti a: “WordPress: filtrate il contenuto dei commenti”

  1. 06 feb, 2010 vik:

    Scusa che differenza c’è fra

    1
    comment_text

    e

    1
    get_comment_text

    e perché usarli entrambi?

  2. 07 feb, 2010 Giovambattista Fazioli:

    @vik: nell’attuale versione di WordPress è possibile applicare il filtro ad entrambe le funzioni; in verità esiste anche la get_comment_excerpt(), la comment_excerpt() e comment_text_rss.
    Comunque, la differenza tra comment_text() e get_comment_text() (come in molte altre funzioni scritte con questa nomenclatura) sta nel tipo di output: la prima, comment_text(), emette l’output a video (cioè esegue una echo interna) mentre la seconda, get_comment_text(), lo restituisce in una variabile, tipo:

    1
    $commento = get_comment_text();

    Nell’esempio le ho inserite entrambe in quando get_comment_text() è utilizzata molto nel backend mentre la comment_text() nel frontend o nei vari temi.
    Tuttavia, eseguendo un reverse engineering del codice, si evince che la funzione get_comment_text() è entrocontennuta nella comment_text(). Ne deriva che basterebbe applicare il filtro alla sola funzione get_comment_text() per agire – indirettamente – anche sulla comment_text().
    Applicando il filtro alla sola funzione comment_text(), avremmo risultati parziali perchè lì dove viene utilizzata la get_comment_text() il nostro filtro non avrebbe effetto.
    Al contrario, applicando il filtro alla get_comment_text() – almeno per come è scritto l’attuale engine di WordPress – si agirebbe su entrabe le funzioni.

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA