Come rimuovere completamente i feed da WordPress?

7 nov 2011, 11:42:38
Visualizzazioni: 19.5K
Voti: 10

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?

3
Commenti

e tonnellate di riscrittura anche per i feed... sono dappertutto!

Ünsal Korkmaz Ünsal Korkmaz
7 nov 2011 11:44:51

curiosità, se non ti dispiace che te lo chieda... perché vuoi rimuovere i feed da WordPress?

Nicole Nicole
7 nov 2011 16:15:57

perché dovrei aver bisogno dei feed in WordPress se non lo uso per il blogging?

Ünsal Korkmaz Ünsal Korkmaz
7 nov 2011 19:13:38
Tutte le risposte alla domanda 3
1
18

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.

28 mar 2012 07:37:44
Commenti

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').

Jake Jake
28 ago 2013 05:37:23
0

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à...

27 apr 2012 18:17:45
1

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ì.

28 mar 2012 03:41:46
Commenti

Ancora più corto nelle versioni più recenti di WordPress: add_filter('post_comments_feed_link', '__return_false'); ma questo nasconde solo un singolo link al feed dei commenti. Si perde... molto per usare un eufemismo...

Jake Jake
28 ago 2013 05:30:55