Wordpress: filtrate il contenuto dei commenti

sabato 6 febbraio, 2010

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:

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

Post correlati

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

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

  1. 06 feb, 2010 vik:

    Scusa che differenza c'è fra

    CODE:
    1. comment_text

    e

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

    PHP:
    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
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL