it-swarm.com.de

Wie verwende ich has_archive, deaktiviere aber den Feed pro Beitragstyp?

Was ist der beste Weg, um Feeds pro Beitragstyp zu deaktivieren, aber has_archive aktiviert zu lassen?

1
torinagrippa

Ich bin heute auf dieses Problem gestoßen. Ich weiß nicht, ob es der beste Weg ist, aber hier ist, wie ich es gelöst habe (wobei has_archive natürlich immer noch auf true gesetzt ist):

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

Beachten Sie, dass dadurch alle Feeds als RSS 2.0 generiert werden, wenn sie generiert werden. Sie erhalten jedoch eine allgemeine Vorstellung davon.

1
Tomas Buteler

Ich habe dies gerade in einem Thema zum Funktionieren gebracht, indem ich überprüft habe, ob wir auf der Archivseite für ein Array benutzerdefinierter Beitragstypen sind, und dann die Feed-Link-Aktionen entfernt habe:

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