Cómo eliminar completamente los feeds de WordPress

7 nov 2011, 11:42:38
Vistas: 19.5K
Votos: 10

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?

3
Comentarios

y montones de reescrituras para los feeds también... ¡están por todas partes!

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

curiosamente, si no te importa que pregunte... ¿por qué quieres eliminar los feeds de WordPress?

Nicole Nicole
7 nov 2011 16:15:57

¿por qué necesitaría feeds en WordPress si no lo estoy usando para blogging?

Ünsal Korkmaz Ünsal Korkmaz
7 nov 2011 19:13:38
Todas las respuestas a la pregunta 3
1
18

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.

28 mar 2012 07:37:44
Comentarios

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

Jake Jake
28 ago 2013 05:37:23
0

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

27 abr 2012 18:17:45
1

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

28 mar 2012 03:41:46
Comentarios

Aún más corto en versiones más recientes de WordPress: add_filter('post_comments_feed_link', '__return_false'); pero esto solo oculta un único enlace al feed de comentarios. Se pierde... mucho por decir lo menos...

Jake Jake
28 ago 2013 05:30:55