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に設定する

publicfalseまたはデフォルトのままだと、フロントエンドに表示されません:

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()publicrewritehas_archiveの設定を確認し、initフック内で登録しているか確認してください。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ