web-dev-qa-db-fra.com

Comment supprimer totalement les flux de WordPress?

Je veux supprimer complètement les flux de WordPress. J'utilise cette petite fonction de http://wpengineer.com/287/disable-wordpress-feed/

/**
* disable feed
*/
function fb_disable_feed() {
wp_die( __('No feed available,please visit our <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);

Pourtant, il y a des tonnes d'options transitoires .. comme _transient_feed_mod ou _transient_timeout_feed_mod

Comment puis-je supprimer complètement les flux de WordPress?

7
Ünsal Korkmaz

Première étape: supprimez les liens de fil de la section de votre site.

<?php
add_action( 'wp_head', 'wpse33072_wp_head', 1 );
/**
 * Remove feed links from wp_head
 */
function wpse33072_wp_head()
{
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'feed_links_extra', 3 );
}

Ensuite, supprimons les points de terminaison de flux de WP. Accrochez-vous dans init, globalisez $wp_rewrite puis définissez les flux dans un tableau vide. Cela empêche effectivement WordPress d’ajouter des réécritures de flux. C'est aussi super hackish et va probablement briser à un moment donné dans le futur.

<?php
add_action( 'init', 'wpse33072_kill_feed_endpoint', 99 );
/**
 * Remove the `feed` endpoint
 */
function wpse33072_kill_feed_endpoint()
{
    // This is extremely brittle.
    // $wp_rewrite->feeds is public right now, but later versions of WP
    // might change that
    global $wp_rewrite;
    $wp_rewrite->feeds = array();
}

Mais si ça casse, pas de problème, car nous redirigerons les flux vers la page d'accueil.

<?php
foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed )
{
    add_action( 'do_feed_' . $feed, 'wpse33072_remove_feeds', 1 );
}
unset( $feed );
/**
 * prefect actions from firing on feeds when the `do_feed` function is 
 * called
 */
function wpse33072_remove_feeds()
{
    // redirect the feeds! don't just kill them
    wp_redirect( home_url(), 302 );
    exit();
}

Et la dernière étape: un crochet d’activation pour définir nos flux de réécriture sur un tableau vide et vider les règles de réécriture.

<?php
register_activation_hook( __FILE__, 'wpse33072_activation' );
/**
 * Activation hook
 */
function wpse33072_activation()
{
    wpse33072_kill_feed_endpoint();
    flush_rewrite_rules();
}

Tout ça comme un plugin .

13
chrisguitarguy

Le code que vous avez posté fera exactement ce qu'il dit: empêcher tout le monde d'accéder à votre site via un flux RSS.

Pourtant, il y a des tonnes d'options transitoires .. comme _transient_feed_mod ou _transient_timeout_feed_mod

Ces options transitoires n'ont absolument rien à voir avec votre flux de site. Le tableau de bord WordPress consomme plusieurs flux par défaut et les affiche dans des champs sur le tableau de bord de l'administrateur. Les plug-ins que vous installez peuvent ajouter leurs propres flux, que ce soit pour l'affichage des actualités ou pour les mises à jour.

WordPress utilise ces valeurs transitoires pour déterminer à quel moment ces consommés flux ont été mis à jour.

Comment puis-je supprimer complètement les flux de WordPress?

Le code que vous avez posté a déjà ...

3
EAMann

Cela devrait le faire

/*disable 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;
}

Mieux encore, si vous avez au moins PHP 5.3, vous pouvez utiliser une version plus courte:

/*disable rss, PHP 5.3+ */
remove_action('wp_head', 'feed_links', 2 );
add_filter('post_comments_feed_link',function () { return null;});

La suppression des réécritures, par contre, prendrait beaucoup plus de temps. Si vous n'êtes pas complètement dingue de performance, vous pouvez les laisser là.

0
bfred.it