特定のカスタム投稿タイプのフィードを削除したいです。最も推奨される方法はきれいではありません。 $args->feeds
というオプションがあるようですが、これはregister_post_type()
関数内では機能しません。
register_post_type(
...
'rewrite' => array('slug' => 'slug/%term&',
'with_front' => false,
'feeds' => false), // Remove feed rewrite-rules?
...
);
出典:1324行目 - /wp-includes/post.php(Wordpress 3.5)
私は$wp_rewrite->rules
内のルール生成を無効にするための解決策を探しています。
WordPressソースのregister_post_type()
関数を見ると、WordPressはisset()
の代わりにempty()
を使ってフィード引数をチェックしているようです。つまり、false
値はtrue
を返します。これを修正するには、'feeds' => null
を設定してからSettings> Permalinksから書き換えルールをフラッシュします(奇妙な風変わりな作業を過ぎるために2回行うことを忘れないでください)。
別の方法として、他のページ(フィードを含む)をロードする前にシャットダウンすることもできます。
do_action('wp','kill_feeds',-1);
function kill_feeds(){
if ( is_feed( array('post','my-custom-type') ) ) {
exit;
}
}
これがすべきことは、現在のリクエストが(あなたが指定した特定の投稿タイプの)フィードであるかどうかを検出し、そうであればそれ以上の出力を停止することです。
あなたが本当に夢中になりたい場合は、代わりにあなたのサイトに404ページにリダイレクトすることができます。 :-)
最後に、これらすべてに失敗した場合は、書き換え規則を手動で変更できます。 rewrite_rules_array フィルタは全体の書き換えルール配列を公開しています。適用可能なフィードルールあなたの投稿が 'foo'だったとすると、これは次のようになります。
add_filter('rewrite_rules_array', 'kill_feed_rewrites');
function kill_feed_rewrites($rules){
foreach ($rules as $rule => $rewrite) {
if ( preg_match('/^foo.*(feed)/',$rule) ) {
unset($rules[$rule]);
}
}
return $rules;
}
フィード参照、ルール自体は次のようになります。
'foo/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => string 'index.php?attachment=$matches[1]&feed=$matches[2]'