イメージ

カスタム投稿タイプのアーカイブページが表示されない場合の直し方


WordPressで生成するページには「投稿ページ」と「固定ページ」という種別があります。

大まかに言えば、ブログ記事のように時系列で管理するものは「投稿ページ」が適していて、時系列ではなく親ページ・子ページのような階層での管理をしたいものは「固定ページ」が適している。

また、上記2つとは別に新たな種別を用意したい場合は「カスタム投稿タイプ」というものを設定することができます。

今ご覧になっているこのサイトの場合、運用事例紹介のページが「カスタム投稿タイプのアーカイブページ」、その中にある各記事ページが「カスタム投稿タイプの記事ページ」になっています。

「カスタム投稿タイプ」を設定すると管理画面は下画像のように左メニューに新たな項目が出現し、投稿ページや固定ページとは別枠での管理やテンプレートファイルの適用ができるようになるのです。
管理画面でのカスタム投稿タイプ

アーカイブページというのは各記事ページが一覧で表示されるページのことを言います。
今ご覧になっているこのサイトを例にして言うと、ブログ一覧ページみたいなのががアーカイブページになるわけです。
アーカイブページ

例えばカテゴリ別一覧ページを作りたいのなら、そのテンプレートファイルはcategory.phpcategory-スラッグ名.phpなどになります。
月別一覧や年別一覧の場合はdate.phpになります。

そのあたりを詳しく知りたい場合はテンプレート階層 – WordPress Codex 日本語版に詳しい説明があります。

上記のWordPress Codexに記載されている通り、カスタム投稿タイプのアーカイブページはarchive-カスタム投稿タイプ名.phpである。

archive.phpでも可能ですが、archive.phpはカテゴリ別一覧や月別一覧などとも兼用(category.phpdate.phpがない場合)になるので、多くの場合はarchive-カスタム投稿タイプ名.phpを用意するのではないかと思います。

そしてそのアーカイブページのURLはパーマリンク設定が数字ベースの場合、

http://ドメイン名/archives/カスタム投稿タイプ名

となります。
パーマリンク設定が数字ベース

または、single.phpやsidebar.phpなど何らかのテンプレートファイル内でget_post_type_archive_link関数を使用すれば、カスタム投稿タイプアーカイブページのURLが出力されますので、それで確認すると間違いがないでしょう。

<?php echo get_post_type_archive_link( 'カスタム投稿タイプ名' ); ?>

さらに、WordPressにログインしている管理者だけが上記のリンクURLを確認したい場合は以下のように、

<?php if( current_user_can( 'administrator' ) ): ?>
<?php echo get_post_type_archive_link( 'カスタム投稿タイプ名' ); ?>
<?php endif; ?>

としておけば、サイトを閲覧している人に気付かれることなく、管理者である自分だけがURLの確認をできます。

参考ページ:関数リファレンス/get post type archive link – WordPress Codex 日本語版
参考ページ:関数リファレンス/current user can – WordPress Codex 日本語版

「なにぃ~カスタム投稿タイプ名がわからないだと~!?」
わからない

そのような場合は、function.php内でregister_post_type()関数が書かれている部分を探して確認すると良いでしょう。

以下のサンプルの場合、「operation」がカスタム投稿タイプ名です。カスタム投稿タイプ名はこの位置で定義されています。(register_post_type()の第1引数)

//カスタム投稿タイプの定義
  register_post_type(
    'operation', array(
      'labels' => array(
        'name' => '運用事例紹介',
        'all_items' => '運用事例のページ一覧',
        'add_new_item' => '運用事例のページを新規追加',
        'edit_item' => '運用事例のページの編集',
      ),
      以下、省略。
    )
  );

もし、プラグイン「Custom Post Type UI(CPT UI)」を使用してカスタム投稿を定義しているのなら、WordPress管理画面でCustom Post Type UI(CPT UI)設定の中の「Manage Post Types」を開き、「名前」の欄で確認できます。
カスタム投稿タイプ名の表示場所

カスタム投稿タイプ名はそのカスタム投稿タイプを設定した本人が名付けたはずなので、いつでも答えられるように記憶しておくとベターです。
外を歩いているときに知らない人から以下のように聞かれるかもしれません。
質問される
正しく答えられないと含み針や銃を撃たれたり、ものすごい重さの銅像を足に括り付けられたりします。(ジャギ – Wikipedia)

しかし。
上記のarchive-カスタム投稿タイプ名.phpテンプレートファイルを用意しただけではアーカイブページは表示されない。

これを表示させるためには、function.php内でカスタム投稿タイプを設定した部分で、

'has_archive' => true,

が必要になる。
どういう理由かはわかりませんが、このhas_archiveは初期値がfalseである。
参考ページ:関数リファレンス/register post type – WordPress Codex 日本語版

実際の記述では以下のような感じで追記すると良いでしょう。

//カスタム投稿タイプ・運用事例
  register_post_type(
    'operation', array(
      'labels' => array(
        'name' => '運用事例紹介',
        'all_items' => '運用事例のページ一覧',
        'add_new_item' => '運用事例のページを新規追加',
        'edit_item' => '運用事例のページの編集',
      ),
      'public' => true,
      'supports' => array(
        'title',
        'editor',
        'custom-fields',
        'thumbnail',
        'author',
      ),
      'has_archive' => true,
    )
  );

以上の追記が終わったら、再びカスタム投稿タイプアーカイブページにアクセスしてみて表示を確認してみましょう。
きっと表示されているはずです。

【補足】
上記の方法はカスタム投稿タイプの設定をfunction.phpに直接記述している場合のやり方になります。
もし「Custom Post Type UI」というプラグインでカスタム投稿タイプを設定している場合は、以下のページの方法で作業してください。
プラグイン「Custom Post Type UI」でのアーカイブページの表示設定のやり方

もしこれでも表示されない場合は一度WordPressのパーマリンク設定を開き、何も変更せずに「変更を保存」ボタンを押してパーマリンク設定を更新してみましょう。
パーマリンク設定
何も変更しなくても、この操作をすることでWordPressのリダイレクト設定(.htaccess)が再設定され、正常にアーカイブページが表示されたりします。

提供サポートなど