WordPressで、カスタム投稿のシングルページ(個別ページ)を出力させたくないときがあります。たとえば、「よくある質問」のように、コンテンツが数百文字でおわってしまうような場合です。その場合、シングルページは寂しい内容になってしまうので、それならいっそ、アーカイブにタイトルとコンテンツを、並べて表示させたほうがいい、という場合です。
対策としては、noindexを入れて、どこからもリンクが発生しないようにすればいいかもしれませんが、どうしても亡きものにしてしまいたいときは、リライトで404にしてしまえ。という方法がこれです。
add_filter( 'faqs_rewrite_rules', '__return_empty_array' );
faqs_rewrite_rules の faqs のところがカスタム投稿のスラッグです。
これを、function.phpなどにいれて、リライトルールをフラッシュすればOKです。
リライトルールのフラッシュは、管理画面の設定→パーマリンク設定→[変更を保存]をクリックするか、次のコードを1回だけ実行させます。
function flushRules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); } add_filter('init','flushRules');
また、カスタムタクソノミーのアーカイブページを出力したくないときは、
add_filter( 'area_rewrite_rules', '__return_empty_array' );
をいれます。areaの部分がカスタムタクソノミーのスラッグです。
他にも、投稿ページや固定ページ、カテゴリーページなど表示させない、というハードボイルドな使い方もできます。
//投稿のシングルページを404に add_filter( 'post_rewrite_rules', '__return_empty_array' ); //固定ページを404に add_filter( 'page_rewrite_rules', '__return_empty_array' ); //カテゴリーページを404に add_filter( 'category_rewrite_rules', '__return_empty_array' ); //投稿者アーカイブを404に add_filter( 'author_rewrite_rules', '__return_empty_array' ); //検索結果ページを404に add_filter( 'search_rewrite_rules', '__return_empty_array' );
詳しくは、関数リファレンスの、WP Rewriteのプラグインフックの項目にあるのですが、日本語版にはカスタム投稿やカスタムタクソノミーについては記載がありません。
ので、英語版の方をみてみると、
「Filter: {$permastruct}_rewrite_rules – Can be used to create or modify rewrite rules for any custom permastructs, such as taxonomies or custom post types.」
というのが見つかります。
もちろん、このフィルターフックは、ページを404にするためだけに存在しているのではなく、たとえばカスタムタクソノミーのアーカイブページにだけ、リライトルールを自作する、といったときにつかうことも出来るようです。
いろいろ調べ回って、突破口になりました。→初期状態のWordPressで作られるページ
ありがとうございます!