Wordpress: filtrate il contenuto dei commenti
sabato 6 febbraio, 2010Mi è 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:
-
function filter_comment($content) {
-
$content = "";
-
foreach($a as $word) {
-
$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.










19

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.