wordpressを使っていると、カスタム投稿タイプで詳細記事を使わない場面があります。
例えばカスタム投稿でレストランメニューを追加していくケースで、メニューの数だけ詳細ページができるけど実際には一覧で参照されるだけで詳細ページは必要なかったり。
そういう時でも、詳細ページは検索に出てきてしまうので、そもそも無いことにしたいです。
調べたらやり方があったので、メモしておきます。
rewrite_rulesフックを使う方法
rewrite_rulesフックを使えば詳細ページは無くせる
ページの生成自体を止めてしまうので404になります。
//add_filter( '{カスタム投稿slug}_rewrite_rules', '__return_empty_array' );
//例
add_filter( 'area_rewrite_rules', '__return_empty_array' );
//投稿のシングルページを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' );
忘れずにパーマリンクを更新
管理画面の設定→パーマリンク設定→[変更を保存]をクリック
テンプレートファイルでリダイレクトする方法
詳細ページのテンプレートファイルの先頭でリダイレクトしてしまう方法でも、詳細ページを無くすことができます。
共通のテンプレートの場合は、条件判定してからリダイレクトする必要があります。
特定の投稿タイプに絞ったテンプレートファイルの場合は、特に条件判定は要らないと思います。
<?php
if(何らかの条件){
wp_safe_redirect( リダイレクト先, 301);
exit;
}
?>
まとめ
詳細ページを無くす方法として、Wordpressの機能として無くしてしまう方法と、リダイレクトして存在しないことにしてしまう2つの方法をご紹介しました。
リダイレクトする方が汎用性は高い気がします。