【Web制作過程】投稿と連動した月間アーカイブを表示する

プログラミング

こんにちは、コンスキです。

これまでのこんだてを月別でまとめた一覧ページに飛ぶリンク(月間アーカイブ)を作っていきます。

月間アーカイブと一覧ページの関係

月間アーカイブは下の画像で示している部分のことです。

これから作る仕組みについて話していきますね。

まず、月間アーカイブにある「〜年〜月」と書かれた部分を一覧ページへのリンクにします。

一覧ページというのは、その「〜年〜月」に投稿された献立をまとめて表示するページのことです。

今回やること

現状では、2020年10月から2021年5月の献立をまとめたページへのリンクが表示されています。

でもこれはおかしいですよね。

なぜかというと、実はまだ1つしか献立を投稿していないためです。

つまり、直接HTMLを描いた「ベタ書き」という状態だということです。

本来は、投稿された月のリンクだけを表示するのが正しいですよね。

そこで、投稿された月のリンクだけを表示できるようすることが今回やることです。

ほんの少しだけ詳しく説明しますね。

献立を投稿する時は「今日の献立」と書かれたメニューから記事を作って公開します。

ここに投稿された献立の投稿日をもとにして、

functions.phpを編集する

すでにテーマフォルダにある「functions.php」に次のスクリプトを追加します。

function change_posts_per_page($query) {
 /* 管理画面,メインクエリに干渉しないために必須 */
 if ( is_admin() || ! $query->is_main_query() ){
     return;
 }
 /* 日付アーカイブページの表示件数を5件にする */
 if ( $query->is_date() ) {
     $query->set( 'posts_per_page', '5' );
     return;
 }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

date.phpを作成する

「date.php」というファイルを新しく作成します。

<?php /* postSingle:START */ ?>
<?php /* 注)表示投稿数はfunctions.phpで設定 */ ?>
  <?php if(have_posts()): ?>
    <?php while(have_posts()):the_post(); ?>
      <?php /* ここにやりたいことを書く */ ?>
    <?php endwhile; ?>
  <?php else: ?>
    <p>記事が見つかりませんでした。</p>
  <?php endif; ?>
<?php /* postSingle:END */ ?>

archive.phpを編集する

「archive.php」はすでに作成してあるファイルです。

このファイルの一覧ページへのリンクの部分を次のように書き換えます。

<div id="previous_menu">
  <h2>これまでのこんだて</h2>
  <p>2021年5月</p>
  <hr>
  <p>2021年4月</p>
  <hr>
  <p>2021年3月</p>
  <hr>
  <p>2021年2月</p>
  <hr>
  <p>2021年1月</p>
  <hr>
  <p>2020年12月</p>
  <hr>
  <p>2020年11月</p>
  <hr>
  <p>2020年10月</p>
</div>

  <div id="previous_menu">
    <?php get_sidebar(); ?>
  </div>

完成形

次のように投稿されている月の一覧ページへのリンクだけがされるようになりました。

レイアウトが変わってしまったので直すつもりです。

参考にさせていただいたサイト

スクリプトをほとんどそのまま使わせていただきました。

404 Not Found - Qiita - Qiita

コメント

タイトルとURLをコピーしました