I want to remove the feeds for specific custom post types. Most recommended methods are not clean. There seems to be a option called $args->feeds
but this does not work within the register_post_type()
function.
register_post_type(
...
'rewrite' => array('slug' => 'slug/%term&',
'with_front' => false,
'feeds' => false), // Remove feed rewrite-rules?
...
);
Source: Line 1324 – /wp-includes/post.php (WordPress 3.5)
I’m looking for a solution, to disable the rule generation inside $wp_rewrite->rules
.
Taking a look at the
register_post_type()
function in WordPress source, it appears that WordPress usesisset()
to check the feeds arg instead ofempty()
, meaning that afalse
value will returntrue
. To fix this, you might try setting'feeds' => null
and then flush your rewrite rules from Settings > Permalinks (remember to do it TWICE, to get past a weird quirk).Alternatively, you can shut down any other page (including feeds) before it has a chance to load…
What this should do is detect if the current request is a feed (of the specific post types you specify) and, if it is, stops any further output.
If you wanted to get really crazy, you could redirect to your sites 404 page instead. 🙂
Finally, failing all that, you could modify your rewrite rules manually. The rewrite_rules_array filter exposes the entire rewrite rules array and you can work a little regex magic to remove any applicable feed rules. Assuming your post was ‘foo’, this might look like…
Feed reference, the rules themselves look something like this…