たかなblog

のんびりと色んな情報を発信していきます。

カスタマイズ

カスタム投稿タイプのアーカイブページの作り方

カスタム投稿タイプで記事を作った際、

「新着一覧に表示されない。。」「アーカイブページってどうやって作ったらいいの?」「アーカイブのタイトルが表示されない!」など様々な問題に直面しますよね。
今回は、カスタム投稿タイプを作った際、アーカイブのタイトルが表示されない!というご質問をいただきましたので、その回答記事となります。

カスタム投稿タイプのアーカイブをメニューバーに表示させたい

カスタム投稿タイプの一覧は、残念ながら外観>メニューの項目には表示されません。
ですので、「カスタムリンク}に投稿タイプのアーカイブページを指定して表示させることになります。

アーカイブページのタイトルが、「」一覧 になる

Stingerのテーマを使っているとブチ当たる壁ですね。
Stingerのテーマでは、テーマファイルの「archive.php」の中に記載があります。

<section>
          <!--ループ開始-->
          <h2>「
            <?php if( is_category() ) { ?>
            <?php single_cat_title(); ?>
            <?php } elseif( is_tag() ) { ?>
            <?php single_tag_title(); ?>
            <?php } elseif( is_tax() ) { ?>
            <?php single_term_title(); ?>
            <?php } elseif (is_day()) { ?>
            日別アーカイブ:<?php echo get_the_time('Y年m月d日'); ?>
            <?php } elseif (is_month()) { ?>
            月別アーカイブ:<?php echo get_the_time('Y年m月'); ?>
            <?php } elseif (is_year()) { ?>
            年別アーカイブ:<?php echo get_the_time('Y年'); ?>
            <?php } elseif (is_author()) { ?>
            投稿者アーカイブ:<?php echo esc_html(get_queried_object()->display_name); ?>
            <?php } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
              ブログアーカイブ
              <?php } ?>
            」 一覧 </h2>
          <?php get_template_part('itiran');?>
        </section>

カテゴリーのアーカイブならならカテゴリー名を、
タブのアーカイブならタブ名を、
カスタムタクソノミーのアーカイブならタクソノミー名を、、といった具合です。
ですので、カスタム投稿タイプを作り、それをカスタムタクソノミーで分類していれば、そのカスタムタクソノミー名が表示されるわけですね。

ですが、今回の「カスタム投稿タイプ」のアーカイブーページか?の分岐は存在しませんので、「」が表示されてしまうわけです。

解決策

今回ご質問いただいた方は初心者だということで、最も手っ取り早い方法をご案内。

Stingerでカスタム投稿タイプを作る際、最もおすすめなのは、「それ用のアーカイブ用のファイルを作っちゃう」ことです。
例えば喫茶店など飲食店サイトを作ったとして、メニューについては通常のブログとは別に、「menu」というスラッグ名で「メニュー」というカスタム投稿タイプを作るとしますよね。
その場合、「archive-menu.php」というファイルを作ると、メニューというカスタムという投稿タイプのアーカイブページだけは、「archive-menu.php」を見に行ってくれるようになります。

あとは、「archive-menu.php」の先ほど紹介したソースコードの部分を、

<section>
          <!--ループ開始-->
          <h2>「メニュー」 一覧 </h2>
          <?php get_template_part('itiran');?>
</section>

 

に書き換えてしまえばOK。ベタ打ちなので簡単ですし、余計な分岐がない分(本当に本当にわからないほどですが)若干表示が早い、、はず。

ちなみに、アーカイブファイルを作り直すのではなく、archive-menu.phpの分岐に「カスタム投稿タイプのアーカイブページか?」という分岐を付け足して対応する場合は、

is_post_type_archive()

という式でカスタム投稿タイプを判別してくれるようですので、組み込んでみるのもありだと思います。
カスタム投稿タイプ名は、

post_type_archive_title()

で取得できますよ!

というわけで、今回はご質問に回答する形での記事となりました。
それではまた。


説明がわかりにくかったので追記です。

管理画面のCPT UIから、Add/Edit Post Typesを選びます。

画面を開いたら、①「Edit Post Types」をクリックし、②で今回アーカイブ一覧を表示させたい投稿タイプを選択し、selectボタンを押下、③カスタム投稿タイプのスラッグを確認します。

次に、FTPツールなどを使ってstingerのテーマフォルダに接続し、「archive.php」ファイルをダウンロード。
そのファイルの名前を「archive-確認したスラッグ名.php」に変更してアップロードします。

すると、以下の図のように、外観>テーマの編集に入った時、右側に表示されるファイル一覧の中に、「アーカイブ」とは別に今回追加したファイルが表示されます。

このarchive-word.phpをクリックすると、ソースコードが表示されますので、中を書き換えます。

具体的に、書き換える部分は<section>から</section>までのあいだのみです。他は触りません。
また、元のarchive.phpは変更しません。触りません。これがないとほかの記事のアーカイブなどがおかしくなってしまいます。

以上、変更の具体的な手順でした。

因みに、「」一覧 をなくしたいのであれば、archive.phpの<h2>から</h2>までをごっそり削除してしまえばOKです。
ただし、archive.phpを書き換えると、ほかのカテゴリー一覧や投稿者別一覧、月別やタグ別といったすべてのアーカイブページに影響がありますのでご注意ください。

「archive-word.php」のように、カスタムタクソノミー専用のアーカイブ用のファイルを作ったうえで、その「」一覧の部分を削除してしまう、というのは全然アリだと思います!

それでは。

 

-カスタマイズ
-,