2026年5月20日
2026年5月20日
カスタム投稿タイプで404エラーが出る場合の解決方法
はじめに
WordPressにカスタム投稿タイプを追加したら、その投稿のページが全て404エラーになった——これはカスタム投稿タイプ開発でよく起こる問題です。原因のほとんどはパーマリンクの再保存で解決しますが、register_post_type()の設定に問題がある場合もあります。
症状・原因
カスタム投稿タイプの404の特徴:
- カスタム投稿タイプを追加した直後から404になる
- 管理画面でカスタム投稿は見えるが、公開ページが404
- アーカイブページ(
/events/など)も404になる - 既存の投稿や固定ページは正常に表示される
主な原因:
1. カスタム投稿タイプ追加後にパーマリンクを再保存していない
2. register_post_type()にrewrite引数の設定ミスがある
3. has_archiveが正しく設定されていない
4. テーマやプラグインの読み込み順序の問題
解決手順
ステップ1:パーマリンクを再保存する(最重要)
カスタム投稿タイプを追加したら必ず行う操作:
1. WordPress管理画面 → 「設定」→「パーマリンク設定」
2. 「変更を保存」をクリック
これだけで90%のケースは解決します。カスタム投稿タイプのRewriteルールはパーマリンク設定の保存時に.htaccessに書き込まれます。
ステップ2:register_post_typeのrewrite設定を確認
functions.phpやプラグインに書かれたregister_post_type()の引数を確認します:
// ❌ 問題のある設定例
register_post_type('event', [
'public' => true,
'rewrite' => false, // ← rewriteをfalseにするとURLが機能しない
]);
// ✅ 正しい設定例
register_post_type('event', [
'public' => true,
'rewrite' => ['slug' => 'events'],
'has_archive' => true,
'labels' => [
'name' => 'イベント',
'singular_name' => 'イベント',
],
'supports' => ['title', 'editor', 'thumbnail'],
]);
ステップ3:’public’をtrueに設定する
publicがfalseまたはデフォルトのままだと、フロントエンドに表示されません:
register_post_type('event', [
'public' => true, // ← 必須
'publicly_queryable' => true, // ← publicをtrueにすれば自動的にtrue
'show_ui' => true,
'show_in_menu' => true,
]);
ステップ4:アーカイブページが404の場合
アーカイブページ(/events/のような一覧ページ)が404になる場合:
register_post_type('event', [
'public' => true,
'has_archive' => true, // ← アーカイブを有効化
// または特定のスラッグを指定:
'has_archive' => 'event-list', // /event-list/ でアーカイブ表示
'rewrite' => ['slug' => 'events'],
]);
設定変更後は必ずパーマリンクを再保存します。
ステップ5:init フックのタイミングを確認
register_post_type()はinitフック内で呼び出す必要があります:
// ✅ 正しい書き方
add_action('init', 'register_event_post_type');
function register_event_post_type() {
register_post_type('event', [
'public' => true,
'has_archive' => true,
'rewrite' => ['slug' => 'events'],
'label' => 'イベント',
'supports' => ['title', 'editor'],
]);
}
// ❌ 間違い:直接呼び出す(早すぎる)
register_post_type('event', [...]); // initフック外はNG
ステップ6:WP-CLIでパーマリンクを更新
SSH接続できる環境では、WP-CLIでパーマリンクを強制更新できます:
wp rewrite flush --hard
--hardオプションで.htaccessへの物理的な書き込みが行われます。
カスタムタクソノミーが404の場合
カスタムタクソノミーのアーカイブも同様に設定が必要です:
register_taxonomy('event_category', 'event', [
'public' => true,
'rewrite' => ['slug' => 'event-cat'],
'hierarchical' => true,
'label' => 'イベントカテゴリ',
]);
タクソノミーの登録後もパーマリンクを再保存してください。
注意事項
- 投稿タイプのスラッグは既存の固定ページのスラッグと衝突しないようにする
pageという名前は予約済みのためカスタム投稿タイプ名に使えない- プラグインでカスタム投稿タイプを追加する場合は、プラグインの有効化後にパーマリンクを再保存する
まとめ
カスタム投稿タイプの404エラーは、多くの場合「設定→パーマリンク設定→変更を保存」で解決します。解決しない場合はregister_post_type()のpublic・rewrite・has_archiveの設定を確認し、initフック内で登録しているか確認してください。
関連記事: