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.








11
Scusa che differenza c’è fra
e
e perché usarli entrambi?
@vik: nell’attuale versione di WordPress è possibile applicare il filtro ad entrambe le funzioni; in verità esiste anche la
get_comment_excerpt(), lacomment_excerpt()ecomment_text_rss.Comunque, la differenza tra
comment_text()eget_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 unaechointerna) mentre la seconda,get_comment_text(), lo restituisce in una variabile, tipo:Nell’esempio le ho inserite entrambe in quando
get_comment_text()è utilizzata molto nel backend mentre lacomment_text()nel frontend o nei vari temi.Tuttavia, eseguendo un reverse engineering del codice, si evince che la funzione
get_comment_text()è entrocontennuta nellacomment_text(). Ne deriva che basterebbe applicare il filtro alla sola funzioneget_comment_text()per agire – indirettamente – anche sullacomment_text().Applicando il filtro alla sola funzione
comment_text(), avremmo risultati parziali perchè lì dove viene utilizzata laget_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.