投稿タイプごとにフィードを無効にしながらhas_archiveを有効にしておくための最良の方法は何ですか?
私は今日この問題に遭遇した。それが最善の方法かどうかはわかりませんが、これを解決する方法は次のとおりです(もちろんhas_archive
をtrueに設定したまま)。
// 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);
}
}
これらが生成されるとき、これがすべてのフィードをRSS 2.0として生成させるでしょうが、あなたは一般的な考えを得ます。
私は、これがテーマの中で動作しているのですが、カスタム投稿タイプの配列がアーカイブページにあるかどうかを確認してから、フィードリンクアクションを削除します。
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' );