カスタム投稿タイプの年月別アーカイブをdate.phpで表示する
カスタム投稿タイプの年月別アーカイブを、「archive-{投稿タイプ名}.php」ではなく「date.php」で表示する方法について。
困ったこと
デフォルトの「投稿」はdate.phpを用意するだけで簡単に年月別アーカイブ専用のページを用意できたが、カスタム投稿タイプもdate.phpに表示するのは簡単だろうと思っていたらとてつもなく苦戦。
解決策
最初はfunctions.phpでカスタマイズする方法を探ったが、結果「Custom Post Type Date Archives ≫」というプラグインを使うと「今までの苦労はなんだったの」ってレベルで簡単に実現できた。
※ functions.phpでカスタマイズする方法は結局分からずじまいです。もしプラグインを使わずに実装する方法を探しにきていたら申し訳ない...。
ー もくじ ー
カスタム投稿の年月別アーカイブをdate.phpで表示する手順
1. テーマフォルダ内にdate.phpを作成
「date.php」をテーマフォルダ内に作成していない場合、最初に作成しておきましょう。
もちろん、data.phpに記事表示ループの記述も忘れずに。
2. Custom Post Type Date Archivesをインストール
管理画面プラグイン新規追加で「Custom Post Type Date Archives」で検索し、インストール・有効化をします。
3. プラグインの設定
プラグインを有効化した後、以下3ステップでCustom Post Type Date Archivesの設定をします。
- 管理画面左バーにあるカスタム投稿タイプのサブメニューに「Date Archives」が増えているのでクリック(この例では「商品」)
- 「Add date archives」にチェック
- 保存を忘れずに
これで設定は終わり。
上記画像の場合「商品(product)」というカスタム投稿タイプを作ったので、
https://xxxx.com/product/date/2019
https://xxxx.com/product/date/2019/08
のようにアクセスすると「date.php」が年月別テンプレートとして適用され表示されるようになっています。
4. date.phpで表示されるか確認【完了】
あとは、年月別アーカイブリンクを表示させたいところに、WordPressのお作法通り wp_get_archives関数 ≫を置いて、
index.phpなど<h2>年別アーカイブ</h2>
<?php
$args = array(
'type' => 'yearly', // 年別アーカイブ。'monthly'なら月別
'show_post_count' => true, // 記事件数を表示する
'post_type' => 'product', // 投稿タイプ名
);
wp_get_archives($args);
?>
↓これが表示される時こういうHTMLになる
表示された年/月別アーカイブリンクをクリックして「date.php」のテンプレートが適用・表示されていることを確認すればOKです。
ちなみに本題からそれますが、上記赤枠のように現在適用されているテンプレート名がWordPress管理バーに表示される「Show Current Template ≫」というプラグインは便利なのでおすすめ。
表示中のテンプレート内で読み込んでいる関連ファイルまで表示してくれます。
WordPressサイトを開発中に「今なんのテンプレートが適用されて表示されてるんだ?」と分からなくなったことがある方はぜひ導入してみてください。