web-dev-qa-db-ja.com

WordPressからフィードを完全に削除する方法

WordPressからフィードを完全に削除したいです。私は/からこの小さな機能を使っています 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);

それでもまだ_transient_feed_mod_transient_timeout_feed_modのような一時的なオプションがたくさんあります。

WordPressからフィードを完全に削除する方法

7
Ünsal Korkmaz

最初のステップ:あなたのサイトのセクションからフィードリンクを削除してください。

<?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 );
}

次に、WPからフィードエンドポイントを削除しましょう。 initにフックし、$wp_rewriteをグローバル化し、フィードを空の配列に設定します。これは効果的にWordPressがフィードリライトを追加するのを防ぎます。それはまた非常にハッキングであり、そしておそらく将来のある時点で壊れるでしょう。

<?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();
}

しかし、それが壊れても、それは問題ありません。フィードをホームページにリダイレクトするからです。

<?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();
}

そして最後のステップは、リライトフィードを空の配列に設定してリライトルールをフラッシュするためのアクティベーションフックです。

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

すべて - プラグインとして

13
chrisguitarguy

あなたが投稿したコードは、それが言うとおりに動作します - 誰もがRSSフィードを介してあなたのサイトにアクセスするのを防ぎます。

それでも_transient_feed_mod_transient_timeout_feed_modのようなたくさんの一時的なオプションがあります。

これらの一時的なオプションは、サイトフィードとはまったく関係ありません。 WordPressダッシュボード を消費します デフォルトで複数のフィードを表示し、管理ダッシュボードのボックスにそれらを表示します。あなたがインストールするプラグインは、ニュース表示や更新のために、それら自身のフィードを追加するかもしれません。

これらの一時的な値は、これらの 消費された フィードがいつ更新されたかを判断するためにWordPressによって使用されます。

WordPressからフィードを完全に削除する方法

あなたが投稿したコードはすでに持っています...

3
EAMann

これはそれをするべきです

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

もっと良いのは、少なくともPHP 5.3があれば、もっと短いバージョンを使うことができます:

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

一方、書き換えを削除すると、かなり時間がかかるため、パフォーマンスを完全に理解できていない限り、そのままにしておくことができます。

0
bfred.it