Question

Quelle est la meilleure façon de désactiver les flux par type poste, mais garder has_archive activé?

Était-ce utile?

La solution

je suis tombé sur cette question aujourd'hui. Je ne sais pas si c'est la meilleure façon, mais voici comment je l'ai résolu (avec has_archive encore défini sur true, bien sûr):

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

S'il vous plaît noter que cela entraînera tous les flux pour générer au flux RSS 2.0, quand ils ne génèrent, mais vous obtenez idée générale.

Autres conseils

Je viens de recevoir ce travail dans un thème en vérifiant si nous sommes sur la page archive pour un tableau de types de poste personnalisé, puis retirer les actions de lien d'alimentation:

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' );
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top