web-dev-qa-db-ja.com

RSSフィードを保護または無効にする方法

私はWordPressをCMSとして設定しようとしています。そのようなものとして、私はそれがほとんど安全なサイトであるので私はフィードを無効にしたいです。すべての[設定]ページを確認しましたが、[調整]または[フィードを無効にする]設定がありません。だから私はこれを行うためにカスタム関数やプラグインを書く必要があると思います。しかし、どうですか?

どんなフィードが存在するかということに関して、私は少なくともこれらのリンクを知っていました...

http://example.com/comments/feed/
http://example.com/feed/

それで、主な質問に加えて、私も少し心配しています:上のコードは利用可能な all feedsをキャッチしますか?そして、これは本当にすべてのフィードを無効にする方法ですか?

ここではプラグインのサポートが話題になっていないことを知っています。しかし、ある文脈のためだけに/脚注として、私は以下の関連する可動部分の組み合わせを使用しています。

私はプラグインを使用してページとブログ投稿へのアクセスを保護することに成功しました。ただし、認証されていないユーザーがフィードURLにアクセスしてもコンテンツは表示されます。プラグインが私が望むことをすることができないようであるので、私はこれをするために自分でコードを書くことに決めました。

Appearance> GeneratePress ページを通過しましたが、アクティブになっているものは何もありません。また、 Appearance> Customize ページ(およびすべての設定)を通過しました。最後に、 "Groups"プラグインのオプションを何度か読み直しましたが、オプションが見つかりませんでした。)

4
Jeroen

@kaiserのコメントで指摘されているように、あなたの質問は この質問 に非常に似ています。実際、 question 自体が答えを持っています。すべてのフィードを無効にするには、次のコードを追加します。

function itsme_disable_feed() {
    wp_die( __( 'No feed available, please visit the <a href="'. esc_url( home_url( '/' ) ) .'">homepage</a>!' ) );
}

add_action('do_feed', 'itsme_disable_feed', 1);
add_action('do_feed_rdf', 'itsme_disable_feed', 1);
add_action('do_feed_rss', 'itsme_disable_feed', 1);
add_action('do_feed_rss2', 'itsme_disable_feed', 1);
add_action('do_feed_atom', 'itsme_disable_feed', 1);
add_action('do_feed_rss2_comments', 'itsme_disable_feed', 1);
add_action('do_feed_atom_comments', 'itsme_disable_feed', 1);

...空のプラグインに変更して、そのプラグインをアクティブにします。これは誰もがフィードアクションにアクセスするのを防ぐはずです。

上記はサンプルコードです。wp_dieではなく、リダイレクトするか、代わりに404を使用してください。

3
Jeroen

add_feed関数に基づいて、これはremove_feedのプロトタイプ実装です:

/**
 * Remove a feed type like /atom1/.
 *
 * @global WP_Rewrite $wp_rewrite
 *
 * @param string   $feedname Feed name.
 * @return string Feed action name.
 */
function remove_feed( $feedname ) {
        global $wp_rewrite;

        if ( in_array( $feedname, $wp_rewrite->feeds ) ) {
                $wp_rewrite->feeds = array_diff( $wp_rewrite->feeds, array( $feedname ) );
        }

        $hook = 'do_feed_' . $feedname;

        // Remove default function hook
        remove_all_actions( $hook );
        add_action( $hook, $hook );

        return $hook;
}

使用法:

remove_feed( 'rss' );
2
Tom J Nowell