1

What is the best way to disable feeds per post type but keep has_archive enabled?

3 Answers 3

1

I ran into this issue today. I don't know if it's the best way, but here's how I solved it (with has_archive still set to true, of course):

// First we remove WP default feed actions
// If we stop here, feeds would be disabled altogether
remove_action('do_feed_rdf', 'do_feed_rdf', 10, 1);
remove_action('do_feed_rss', 'do_feed_rss', 10, 1);
remove_action('do_feed_rss2', 'do_feed_rss2', 10, 1);
remove_action('do_feed_atom', 'do_feed_atom', 10, 1);

// Now we add our own actions, which point to our own feed function
add_action('do_feed_rdf', 'my_do_feed', 10, 1);
add_action('do_feed_rss', 'my_do_feed', 10, 1);
add_action('do_feed_rss2', 'my_do_feed', 10, 1);
add_action('do_feed_atom', 'my_do_feed', 10, 1);

// Finally, we do the post type check, and generate feeds conditionally
function my_do_feed() {
    global $wp_query;
    $no_feed = array('cpt_1', 'cpt_2');
    if(in_array($wp_query->query_vars['post_type'], $no_feed)) {
        wp_die(__('This is not a valid feed address.', 'textdomain'));
    }
    else {
        do_feed_rss2($wp_query->is_comment_feed);
    }
}

Please note that this will cause all feeds to generate as RSS 2.0, when they do generate, but you get general idea.

0
0

I just got this working in a theme by checking if we're on the archive page for an array of custom post types and then removing the feed link actions:

function themename_remove_feed_links() {
    if ( is_post_type_archive( array( 'gallery', 'client', 'testimonial', 'slideshow' ) ) ) {
        remove_action('wp_head', 'feed_links_extra', 3 );
        remove_action('wp_head', 'feed_links', 2 );
    }
}

add_action( 'template_redirect', 'themename_remove_feed_links' );
0

I haven't tested, but it should be as simple as:

register_post_type( 'slug', array(
    'has_archive' => true,

    'rewrite' => array(
        'slug' => 'slug',
        'feeds' => false,
    ),
);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.