Come eliminare questo specifico filtro e, trasversalmente, ogni altro filtro o azione in Wordpress.
In Wordpress i link inseriti nei commenti vengono automaticamente editati, inserendo l’attributo rel con valore nofollow.
rel="nofollow" indica ai motori di ricerca che lo interpretano (tra cui Google) di ignorare quel link.
Questo, stando a quanto scritto sul Google Blog, servirebbe a prevenire lo spam nei commenti. Anche se, e chi gestisce un blog Wordpress da qualche tempo forse potrÃ? confermarlo, questa prevenzione non è che sia molto efficace :P
Se a questa considerazione aggiungiamo che:
- Dipende dal blog e dipende dal commento, ma, in linea di massima, un link postato in un commento si presume sia a tema con il post e che ne approfondisca il contenuto. E che quindi valorizzi il post stesso (sia per chi legge sia per i motori di ricerca).
- Con tutti i plugin per Wordpress anti spam, in primis Spam Karma 2 e Akismet, Captcha, domande sceme, metodi alternativi per i più originali e moderazione dei commenti… abbiamo davvero bisogno di questa ulteriore precauzione?
Io credo di no, e quindi l’ho eliminata. Se vi interessa vi spiego come.
Referenze.
Un po’ di teoria, intanto che ci siamo :)
Ci sono due funzioni che inseriscono il rel="nofollow" in un link, entrambe definite nel file /wp-includes/functions-formatting.php: wp_rel_nofollow() e make_clickable().
-
wp_rel_nofollow()inserisce ilrel="nofollow"solo in link HTML (es.<a href="http://www.google.it">Google/</a>viene trasformato in<a href="http://www.google.it" rel=”nofollow”>Google/</a>).I commenti vengono dati in pasto a questa funzione con l’hook pre_comment_content nel file /wp-includes/default-filters.php:
add_filter('pre_comment_content', 'wp_rel_nofollow', 15);Questo operazione viene eseguita solo alla pubblicazione del commento.
-
La funzione
make_clickable()trasforma un URL in un link ed inserisce in questo link l’attributorel="nofollow".I commenti vengono passati a questa funzione con
add_filter('comment_text', 'make_clickable'), sempre nel file /wp-includes/default-filters.php, e l’operazione viene eseguita ogni volta che si visualizza un commento.
Bypassare wp_rel_nofollow() e make_clickable().
Il modo più evidente per bypassare wp_rel_nofollow() è eliminare dal file /wp-includes/default-filters.php il codice add_filter('pre_comment_content', 'wp_rel_nofollow', 15);.
Ma evitare di modificare il codice sorgente è spesso una buona idea. CosÃ?¬, almeno, ogni volta che aggiorneremo la nostra versione di Wordpress non dovremo preoccuparci di tutte le parti che abbiamo modificato.
Ecco quindi la seconda soluzione: usare la funzione remove_filter(). Per eliminare un filtro esistente, dobbiamo fornire a questa funzioni gli stessi parametri dati ad add_filter(). Nel nostro caso:
remove_filter('pre_comment_content', 'wp_rel_nofollow', 15);
Se volessimo eliminare un’azione, potremmo usare la stessa funzione o l’alias remove_action(), è indifferente, fanno la stessa cosa.
Con la funzione make_clickable() potremmo fare la stessa cosa, ma cosÃ?¬ facendo perderemmo anche la conversione degli URL in link. Quindi possiamo fare una funzione che utilizzi la funzione make_clickable() e che ne modifichi l’output:
function custom_make_clickable($ret){
$return = make_clickable($ret);
return str_replace('rel="nofollow"', '', $return);
}
Magari usando un espressione regolare, per fare in modo che rel="nofollow" sia sostituito solo nei link e non nel testo:
function custom_make_clickable($ret){
$return = make_clickable($ret);
return preg_replace('#<a(.+)(rel="nofollow"|rel='nofollow')(.*)>#Us', "<a$1$3>", $return);
}
O creare una copia della funzione make_clickable() ed eliminare la parte che inserisce il rel="nofollow":
function custom_make_clickable($ret) {
$ret = ‘ ‘ . $ret;
// in testing, using arrays here was found to be faster
$ret = preg_replace(
array(
‘#([s>])([w]+?://[w#$%&~/.-;:=,?@[]+]*)#is’,
‘#([s>])((www|ftp).[w#$%&~/.-;:=,?@[]+]*)#is’,
‘#([s>])([a-z0-9-_.]+)@([^,< nr]+)#i’),
array(
‘$1<a href=”$2″ rel=”nofollow”>$2</a>’,
‘$1<a href=”http://$2″ rel=”nofollow”>$2</a>’,
‘$1<a href=”mailto:$2@$3″>$2@$3</a>’),$ret);
// this one is not in an array because we need it to run last, for cleanup of accidental links within links
$ret = preg_replace(”#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i”, “$1$3“, $ret);
$ret = trim($ret);
return $ret;
}
E fare in modo che venga eseguita questa, anzichÃ?© l’originale:
remove_filter('comment_text', 'make_clickable');
add_filter('comment_text', 'custom_make_clickable');
Ma questo codice dove lo mettiamo?
Io direi in un plugin ad uso personale. Creiamo un file PHP, magari potremmo chiamarlo my-hacks.php, ed inseriamoci:
<php
/*
Plugin Name: Personal hacks
*/
function custom_make_clickable($ret){
$ret = ' ' . $ret;
// in testing, using arrays here was found to be faster
$ret = preg_replace(
array(
'#([s>])([w]+?://[w#$%&~/.-;:=,?@[]+]*)#is',
'#([s>])((www|ftp).[w#$%&~/.-;:=,?@[]+]*)#is',
'#([s>])([a-z0-9-_.]+)@([^,< nr]+)#i'),
array(
'$1<a href="$2">$2</a>',
'$1<a href="http://$2">$2</a>',
'$1<a href="mailto:$2@$3">$2@$3</a>'),$ret);
// this one is not in an array because we need it to run last, for cleanup of accidental links within links
$ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3“, $ret);
$ret = trim($ret);
return $ret;
}
remove_filter(’pre_comment_content’, ‘wp_rel_nofollow’, 15);
remove_filter(’comment_text’, ‘make_clickable’);
add_filter(’comment_text’, ‘custom_make_clickable’);
?>
Mettiamolo nella cartella dei plugin ed attiviamolo dal pannello di amministrazione dei plugin.
CosÃ?¬ ora abbiamo anche un nostro plugin in cui inserire le varie utility che creeremo durante la nostra esperienza di blogger Wordpress (magari qualcuna la proporrÃ?² anch’io nei prossimi post :)
Eliminare il nofollow dai link degli autori
Fino a qui abbiamo visto come eliminare il nofollow dai link postati nel contenuto del commento. Per eliminarli anche da i link degli autori dei commenti, potete aggiungere questo:
function rimuovi_nofollow($return){
return str_replace(array('rel="external nofollow"', 'rel=\'external nofollow\''), 'rel="external"', $return);
}
add_filter('get_comment_author_link', 'rimuovi_nofollow');
tag: commenti, PHP, plugin, WordPress, wp hacks, wp hooks.
post correlati:
- L'architettura a plugin di WordPress
- Plugin per Wordpress più usabili usando l'hook activate_
- Feed completi con il tag more in WordPress
- Spleender Up: per terminare l'importazione di Spleender
- GT Post Approval [WordPress Plugin]
- Migrare da Splinder/Motime a Wordpress.com
- Importare i post di Splinder/Motime in Wordpress

29 November 2006 alle 20:04
Interessante, esistono dei plugin un po’ più avanzati che, per esempio, tolgono il nofollow solo dopo un tot di tempo, in modo che in ogni caso l’autore del blog possa cancellare eventuale spam.
Tra l’altro non ricordo bene, ma mi pare che il nofollow fosse aggiunto come
rel="external nofollow", quindi penso che lo str_replace vada modificato..30 November 2006 alle 11:24
Comodo come plugin, anche se per ora Spam Karma ha fatto passare giusto un paio di commenti di spam :)
Bo’, guardando il codice (sia PHP che l’output HTML) WP aggiunge solo
rel="nofollow", ma in effetti lo str_replace andrebbe sostituito con un preg_replace ed un espressione regolare, per non rischiare di perdere anche i commenti che contengono la parola rel=”nofollow”. E allora tanto vale copiare la funzione originale ed eliminare le parti che aggiungono il nofollow. Modifico il post! :D4 December 2006 alle 11:00
[quote comment=”906″]Tra l’altro non ricordo bene, ma mi pare che il nofollow fosse aggiunto come
rel="external nofollow", quindi penso che lo str_replace vada modificato..[/quote]Quello viene aggiunto nel link dell’autore del commento :P
7 May 2007 alle 14:01
Scusate, ma perchè non togliamo tutti il nofollow, se cmq i commenti vengono moderati? in questo modo possiamo premiare tutte le persone che postano sul blog, aiutandolo a restare vivo
3 July 2007 alle 21:23
Bene annulliamo tutti i links cosÃ?¬ poi il pagerank non c’è più e la finiamo di rompere i c….
15 July 2007 alle 09:09
[…] è quanto, chiaramente, spiega Francesco Terenziani nel suo blog. Stefano Gorgoni, nel suo ultimo post , che ho trovato davvero troppo interessante e […]
16 July 2007 alle 04:23
[…] Eliminare i rel=”nofollow” dai link nei commenti di Wordpress (tags: google plugin wordpress) […]
16 July 2007 alle 04:24
[…] Eliminare i rel=”nofollow” dai link nei commenti di Wordpress (tags: google plugin wordpress) […]
20 July 2007 alle 11:28
[…] Per evitare ciÃ?² possiamo ad esempio seguire le complete (ma complicate) istruzioni indicate qui (link preso sempre a prestito da Uncino.net, ma questo è l’ultimo credito!), oppure, senza […]
12 August 2007 alle 11:50
[…] Credo nelle affermazioni di Stefano e vedrÃ?Æ?Ã?² di fare in mondo che Pandemia torni all’era prima del nofollow, con l’intercessione del padrone di casa. Se credi in questa filosofia, agire Ã?Æ?è facile. […]
27 August 2007 alle 23:45
Qualche novitÃ? sul blog……
Oggi è stata una giornata di pulizie… dopo aver sistemato le faccine, ho rivisto la lista dei plugin che utilizzo.
Ho eliminato alcuni plugin e… svuotato per benino la tabella wp_options che erroneamente era rimasta piena di record creati …
29 August 2007 alle 21:24
Ho fatto la stessa cosa sul mio blog
4 September 2007 alle 16:22
tolto anche sul mio blog
25 September 2007 alle 11:18
[…] Eliminare i rel=ââ?¬Ânofollowââ?¬Â dai link nei commenti di Wordpress […]
1 October 2007 alle 21:04
Assololutamente d’accordo a rimuovere il nofollow, è inutile, non risolve il problema dello spam e penalizza gli utenti.
31 October 2007 alle 19:16
si ok ma dove va inserito?
31 October 2007 alle 19:26
Ciao Sergejpinka,
il codice è da mettere in un plugin. Se ti servono maggiori informazioni prova a leggere il punto di questo post “Ma questo codice dove lo mettiamo?”
26 December 2007 alle 16:08
se ho capito bene,chi inserisce un link in un sito con il no no follow dovrebbe trarne beneficio aumentando il proprio pr mentre al sito dove si commenta…non succede nulla,giusto?
18 February 2008 alle 18:13
grande! non vedo l’ora di farlo a un mio blogguzzo xD
31 March 2008 alle 17:13
Ma non è un po’ una truffa… cioè se blog come blogspot lo tolgono di default, non è per evitare spam o commenti inutili?
13 September 2008 alle 22:00
Attenzione alle lettere accentate (). Riguardo il no follow, io credo che toglierlo porti due vantaggi: in primo luogo una sorta di “premio” per chi commenta e aggiunge contenuti al blog; secondariamente è un modo per indurre a commentare
10 April 2009 alle 14:55
Scusate, ma perchè non togliamo tutti il nofollow, se cmq i commenti vengono moderati? in questo modo possiamo premiare tutte le persone che postano sul blog, aiutandolo a restare vivo