Cómo eliminar completamente los feeds de WordPress
Quiero eliminar completamente los feeds de WordPress. Estoy usando esta pequeña función de http://wpengineer.com/287/disable-wordpress-feed/
/**
* Deshabilitar feed
*/
function fb_disable_feed() {
wp_die( __('No hay feed disponible, por favor visita nuestra <a href="'. get_bloginfo('url') .'">página de inicio</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);
Aún hay muchas opciones transitorias... como _transient_feed_mod
o _transient_timeout_feed_mod
¿Cómo puedo eliminar completamente los feeds de WordPress?

Primer paso: eliminar los enlaces de feed de la sección
de tu sitio.<?php
add_action( 'wp_head', 'wpse33072_wp_head', 1 );
/**
* Eliminar enlaces de feed de wp_head
*/
function wpse33072_wp_head()
{
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
}
A continuación, eliminemos los endpoints de feed de WordPress. Conecta a init
, globaliza $wp_rewrite
y luego establece los feeds como un array vacío. Esto efectivamente impide que WordPress añada reescrituras de feed. También es bastante frágil y probablemente dejará de funcionar en el futuro.
<?php
add_action( 'init', 'wpse33072_kill_feed_endpoint', 99 );
/**
* Eliminar el endpoint `feed`
*/
function wpse33072_kill_feed_endpoint()
{
// Esto es extremadamente frágil.
// $wp_rewrite->feeds es público ahora, pero versiones futuras de WP
// podrían cambiar esto
global $wp_rewrite;
$wp_rewrite->feeds = array();
}
Pero si deja de funcionar, no hay problema, porque redireccionaremos los feeds a la página de inicio.
<?php
foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed )
{
add_action( 'do_feed_' . $feed, 'wpse33072_remove_feeds', 1 );
}
unset( $feed );
/**
* Evitar que se ejecuten acciones en feeds cuando se llama a la función `do_feed`
*/
function wpse33072_remove_feeds()
{
// ¡redirige los feeds! no los elimines simplemente
wp_redirect( home_url(), 302 );
exit();
}
Y el último paso: un hook de activación para establecer nuestros feeds de reescritura como un array vacío y limpiar las reglas de reescritura.
<?php
register_activation_hook( __FILE__, 'wpse33072_activation' );
/**
* Hook de activación
*/
function wpse33072_activation()
{
wpse33072_kill_feed_endpoint();
flush_rewrite_rules();
}
Todo eso como un plugin.

Cosas útiles. ¡Gracias! Añadí algunos feeds a tu array. Sé que están estos dos para comentarios: 'do_feed_rss2_comments', 'do_feed_atom_comments'. Creo que también necesitas 'do_feed'. Lo actualicé así: add_action( 'do_feed' . ($feed ? '_' . $feed : ''), 'wpse33072_remove_feeds', 1 );
y el array: array('', 'rdf', 'rss', 'rss2', 'atom', 'rss2_comments', 'atom_comments')
.

El código que publicaste hará exactamente lo que dice que hará: evitará que cualquier persona acceda a tu sitio a través de un feed RSS.
Aún hay muchas opciones transitorias... como
_transient_feed_mod
o_transient_timeout_feed_mod
Estas opciones transitorias no tienen absolutamente nada que ver con el feed de tu sitio. El panel de control de WordPress consume varios feeds por defecto y los muestra en bloques en el escritorio de administración. Los plugins que instales pueden agregar sus propios feeds, ya sea para mostrar noticias o actualizaciones.
Estos valores transitorios son utilizados por WordPress para determinar cuándo estos feeds consumidos han sido actualizados.
¿Cómo puedo eliminar completamente los feeds de WordPress?
El código que has publicado ya lo hace...

Esto debería funcionar
/*deshabilitar 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;
}
Mejor aún, si tienes al menos PHP 5.3 puedes usar una versión más corta:
/*deshabilitar rss, PHP 5.3+ */
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link',function () { return null;});
Eliminar las reescrituras, por otro lado, tomaría mucho más tiempo, así que a menos que estés completamente obsesionado con el rendimiento, puedes dejarlas ahí.
