こんにちは!コーダーのゆうしです。
WordPressでカスタム投稿タイプを使っていると「一覧ページは必要だけど詳細ページはいらない」という場面があります。FAQや商品一覧・スタッフ紹介など、詳細ページに飛ばずに一覧だけで完結させたいケースです。この記事では register_post_type() の public パラメータを使って詳細ページを生成しない方法を解説します。
詳細ページを生成しない仕組み
カスタム投稿タイプの登録時に 'public' => false を指定することで、詳細ページのURLが生成されなくなります。ただし 'show_ui' => true を合わせて指定することで管理画面には表示され、WP_Queryで投稿データの取得も引き続き可能です。
実装コード
functions.php に以下のコードを追加します。
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'dammy', [
'labels' => [
'name' => 'ダミー',
'singular_name' => 'dammy',
],
'public' => false, // 詳細ページを生成しない
'show_ui' => true, // 管理画面には表示する
'supports' => ['title', 'editor', 'excerpt', 'thumbnail', 'custom-fields'],
'has_archive' => true,
'menu_position' => 5,
]);
}'dammy' や 'ダミー' の部分はご自身の投稿タイプ名に変更してください。
今回のコードで重要なパラメータをまとめました。
| パラメータ | 値 | 内容 |
|---|---|---|
| public | false | 詳細ページのURLを生成しない。フロントエンドから直接アクセスできなくなる |
| show_ui | true | WP管理画面にメニューとして表示する。falseだと管理画面からも見えなくなる |
| has_archive | true | アーカイブページを有効にする |
| supports | 配列 | 投稿編集画面で使える機能を指定。title・editor・thumbnail など |
| menu_position | 数値 | 管理画面のメニュー位置。5で「投稿」の下あたりに表示される |
publicのデフォルト値に注意
public のデフォルト値は false です。ただし、ネット上のコードサンプルや使い回しているコードでは 'public' => true になっていることが多いので、詳細ページが不要な場合は意識して false に変更してください。
どんな場面で使うか
詳細ページが不要なカスタム投稿タイプの例としてはこんなケースがあります。
- FAQ:質問と回答を管理して一覧ページにまとめて表示する
- 商品一覧:商品情報を管理して一覧ページのみで使う
- スタッフ紹介:スタッフ情報を一覧ページにのみ表示する
- ロゴ・実績:クライアントのロゴや実績を一覧表示するだけの場合
詳細ページに飛んだときに404になってしまうのを防げるので、このような用途では積極的に使っていきましょう。
躓きやすいポイント
詳細ページのURLを直接叩くと404になる
'public' => false にすると詳細ページへのアクセスが404になります。これは意図通りの動作ですが、一覧ページから詳細ページへのリンクを貼っている場合は404になるので注意してください。詳細ページが不要な用途でのみ使いましょう。
管理画面に表示されない
'show_ui' => true を忘れると管理画面のメニューに表示されません。public を false にする場合は必ず show_ui を true にセットで指定してください。
パーマリンクを更新する
カスタム投稿タイプを登録したあとはパーマリンクの設定を一度保存し直してください。管理画面の「設定」→「パーマリンク」を開いて「変更を保存」するだけでOKです。これをしないとアーカイブページが404になることがあります。
まとめ
カスタム投稿タイプで 'public' => false と 'show_ui' => true を組み合わせることで、管理画面での投稿管理はしつつ詳細ページを生成しない設定ができます。FAQ・商品一覧・スタッフ紹介など一覧表示だけで完結するコンテンツに活用してみてください。
ご不明な点やコーディングのご依頼はお問い合わせからお気軽にどうぞ。

