WordPressでカスタム投稿を使ったとき、個別ページが不要なケースがあり、個別ページが404になるようにしたのですが、ハマったのでメモ。
カスタム投稿定義
function.phpに記載するか、別ファイルにしてget_template_part()で読み込みます。
下記は別ファイルにしてあります。function.phpに直接書き込む場合は、先頭の<?php を消してください。
<?php /** * お知らせ * 投稿タイプ名 news * * @package WordPress * @author 渡辺光理 */ /** カスタム投稿 */ function create_post_type() { register_post_type( 'news', array( // 投稿タイプ名の定義. 'labels' => array( // 管理画面上で表示する投稿タイプ名. 'name' => 'お知らせへ', // カスタム投稿の識別名. 'singular_name' => 'お知らせ追加', // 新規追加. 'add_new' => 'お知らせ追加', 'all_items' => 'お知らせ一覧', 'search_items' => '検索', 'edit_item' => '編集', ), // 投稿タイプをpublicにするか('public' => trueにしても、add_filterで404になることがある). 'public' => false, 'publicly_queryable' => true, 'show_ui' => true, // アーカイブページON/OFF. 'has_archive' => true, // 'editor'を入れるとエディターが表示される. 'supports' => array( 'title', 'thumbnail', 'editor' ), // メニューアイコン. 'menu_icon' => 'dashicons-admin-site-alt3', ) ); } add_action( 'init', 'create_post_type' ); add_filter( 'news_rewrite_rules', '__return_empty_array' );
ポイント(register_post_type)
'public' => false,
通常は'public' =>true,
ですが、’public’ => false, にすると、管理画面とフロント(公開画面)が両方ともに、非公開になります。
また、'public' =>true,
でも、add_filterで404にする(下記参照)と、個別ページが404になるので、必要に応じて設定してください。
次にフロントで表示させるために、
'publicly_queryable' => true,
として、フロントエンドで post_type クエリを実行可能にします。
さらに、管理画面で表示させるために、
'show_ui' => true,
とします。
また、アーカイブでカスタム投稿を表示させるため
'has_archive' => true,
これを忘れずに入れます。
これだけでも、カスタム投稿の個別ページが表示されなくなりますが、404エラーにはなりません。
ポイント(add_filterで404にする)
カスタム投稿の個別ページが表示されないのですが、404エラーにはなりません。
そこで、add_filterを使ってカスタム投稿の個別ページを404エラーにします。
add_filter( 'news_rewrite_rules', '__return_empty_array' );
上記
news_rewrite_rules
の
news
は、カスタム投稿のスラッグです。register_post_typeで最初に入力したパラメータの値ですよ!
最後にパーマリンクの更新をする
管理画面>設定>パーマリンク設定 で「変更を保存」のボタンをぽちっと押します。
これでカスタム投稿のシングルページ(個別ページ)が404になると思います。