Come rimuovere completamente i feed da WordPress?
Voglio rimuovere completamente i feed da WordPress. Sto utilizzando questa piccola funzione da http://wpengineer.com/287/disable-wordpress-feed/
/**
* Disabilita i feed
*/
function fb_disable_feed() {
wp_die( __('Nessun feed disponibile, visita la nostra <a href="'. get_bloginfo('url') .'">homepage</a>!') );
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);
Ma ci sono ancora tantissime opzioni transient... come _transient_feed_mod
o _transient_timeout_feed_mod
Come posso rimuovere completamente i feed da WordPress?

Primo passo: rimuovi i link ai feed dalla sezione <head> del tuo sito.
<?php
add_action( 'wp_head', 'wpse33072_wp_head', 1 );
/**
* Rimuovi i link ai feed da wp_head
*/
function wpse33072_wp_head()
{
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
}
Successivamente, rimuoviamo gli endpoint dei feed da WP. Agganciamo la funzione a init
, rendiamo globale $wp_rewrite
e poi impostiamo i feed su un array vuoto. Questo impedisce effettivamente a WordPress di aggiungere le regole di riscrittura dei feed. È anche un po' un hack e probabilmente smetterà di funzionare in futuro.
<?php
add_action( 'init', 'wpse33072_kill_feed_endpoint', 99 );
/**
* Rimuovi l'endpoint `feed`
*/
function wpse33072_kill_feed_endpoint()
{
// Questo è estremamente fragile.
// $wp_rewrite->feeds è pubblico ora, ma versioni future di WP
// potrebbero cambiarlo
global $wp_rewrite;
$wp_rewrite->feeds = array();
}
Ma se smette di funzionare, non è un problema, perché reindirizzeremo i feed alla home page.
<?php
foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed )
{
add_action( 'do_feed_' . $feed, 'wpse33072_remove_feeds', 1 );
}
unset( $feed );
/**
* Previeni l'esecuzione di azioni sui feed quando la funzione `do_feed`
* viene chiamata
*/
function wpse33072_remove_feeds()
{
// reindirizza i feed! non limitarti a bloccarli
wp_redirect( home_url(), 302 );
exit();
}
E l'ultimo passo: un hook di attivazione per impostare i nostri feed di riscrittura su un array vuoto e ripulire le regole di riscrittura.
<?php
register_activation_hook( __FILE__, 'wpse33072_activation' );
/**
* Hook di attivazione
*/
function wpse33072_activation()
{
wpse33072_kill_feed_endpoint();
flush_rewrite_rules();
}
Tutto questo come plugin.

Utile. Grazie! Ho aggiunto alcuni feed al tuo array. So che ci sono questi due per i commenti: 'do_feed_rss2_comments', 'do_feed_atom_comments'. Credo che tu abbia bisogno anche di 'do_feed'. Ho aggiornato così: add_action( 'do_feed' . ($feed ? '_' . $feed : ''), 'wpse33072_remove_feeds', 1 );
e l'array: array('', 'rdf', 'rss', 'rss2', 'atom', 'rss2_comments', 'atom_comments')
.

Il codice che hai postato farà esattamente quello che dice - impedirà a chiunque di accedere al tuo sito tramite un feed RSS.
Ci sono ancora tonnellate di opzioni transient.. come
_transient_feed_mod
o_transient_timeout_feed_mod
Queste opzioni transient non hanno assolutamente nulla a che fare con il feed del tuo sito. La dashboard di WordPress consuma diversi feed per impostazione predefinita e li visualizza in riquadri nella dashboard di amministrazione. I plugin che installi potrebbero aggiungere i propri feed, sia per visualizzare notizie che per aggiornamenti.
Questi valori transient vengono utilizzati da WordPress per determinare quando questi feed consumati sono stati aggiornati.
Come posso rimuovere completamente i feed da WordPress?
Il codice che hai pubblicato ha già...

Questo dovrebbe funzionare
/*disabilita rss*/
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link','bfr_disable_comments_feeds');
function bfr_disable_comments_feeds() {
return null;
}
Ancora meglio, se hai almeno PHP 5.3 puoi usare una versione più breve:
/*disabilita rss, PHP 5.3+ */
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link',function () { return null;});
Rimuovere i rewrite, d'altra parte, richiederebbe molto più tempo, quindi a meno che tu non sia completamente ossessionato dalle prestazioni puoi lasciarli lì.
