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になると思います。


