web-dev-qa-db-fra.com

Comment utiliser has_archive mais désactiver le flux par type de publication?

Quel est le meilleur moyen de désactiver les flux par type de publication tout en conservant has_archive activé?

1
torinagrippa

J'ai rencontré ce problème aujourd'hui. Je ne sais pas si c'est le meilleur moyen, mais voici comment je l'ai résolu (avec has_archive toujours 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);
    }
}

Veuillez noter que cela générera tous les flux en tant que RSS 2.0, mais vous aurez une idée générale.

1
Tomas Buteler

Je viens tout juste de voir cela fonctionner dans un thème en vérifiant si nous sommes sur la page d'archives pour un tableau de types de publications personnalisés, puis en supprimant les actions de lien de fil:

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
Robert Went