月別アーカイブ一覧で複数月に同じ記事を表示する

以前にイベント情報を掲載するコンテンツの月別アーカイブページを作成する記事を掲載しましたが、イベントの期間が複数月に渡る場合にその複数月のアーカイブページに同じイベントを表示したいということがあったので、その際に行った対応方法をメモしておきます。

作成内容

元々の設定について詳しくは以前の記事で確認できますが、「イベント情報」という名前で以下のようなコンテンツフィールドを作成していました。

  • 開催日(日付フィールド・必須)
  • 終了日(日付フィールド)

今回やりたかったのは、「開催日」と「終了日」で設定した日付の期間内に含まれる月のアーカイブページ全てにイベント情報を掲載することです。
例えば前回の記事のイベントBの場合、開催日が「2021-03-27」で終了日が「2021-04-03」なので、2021年3月と2021年4月の月別アーカイブ一覧に表示になります。

実装方法

実装方法を調べてみた限り、複数のフィールドの範囲でアーカイブ一覧を作成というのが難しそうでした。
そのため今回は、元々作成していた「開催日」「終了日」の日付フィールドとは別に、月別アーカイブページの振り分け用に年月のカテゴリを用意して実装してみます。

「イベント期間」という名前でカテゴリセットを作成して、以下のような項目を登録します。

  • 2021
    • 03
    • 04

親カテゴリが年、子カテゴリが月になっていますので、必要に応じて増減してください。

次に「イベント情報」のコンテンツタイプに「イベント期間」という名前で先ほど作成したカテゴリを追加します。
仕様上複数月を選択できる必要があるので、カテゴリを追加する際に複数選択を許可するようにしてください。

投稿画面は以下のようになりました。

前回ダミー用に投稿したコンテンツのカテゴリを選択しておきます。

  • ラベル:イベントA 開催日:2021-03-06 イベント期間:03
  • ラベル:イベントB 開催日:2021-03-27 終了日:2021-04-03 イベント期間:03,04
  • ラベル:イベントC 開催日:2021-03-13 終了日:2021-03-20 イベント期間:03

次に前回作成した「イベント月別一覧」のテンプレートを編集します。
新しくアーカイブマッピングを作成して、種類を「コンテンツタイプ カテゴリ別」、カテゴリフィールドを「イベント期間」にして追加をクリックします。
カテゴリフィールドの場合は日付フィールドと違い、必須でなくても選択可能です。

テンプレート内容はほぼ同じですが、mt:ArchiveTitleの内容が以前と変わるので修正しています。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
<h1><mt:ArchiveTitle>月</h1>
<mt:Contents content_type="イベント情報" sort_by="field:開催日" sort_order="ascend">
  <mt:ContentsHeader><ul></mt:ContentsHeader>
  <li>
    <h2><mt:ContentLabel></h2>
    <div>
      <mt:ContentField content_field="開催日">
        <mt:ContentFieldValue format="%Y年%m月%d日">
      </mt:ContentField>
      <mt:ContentField content_field="終了日">
        ~ <mt:ContentFieldValue format="%Y年%m月%d日">
      </mt:ContentField>
    </div>
  </li>
  <mt:ContentsFooter></ul></mt:ContentsFooter>
</mt:Contents>
</body>
</html>

これでテンプレートの変更が完了したので、再構築を行います。
以下のような内容で月別のアーカイブページが作成できました。

<h1>03月</h1>
<ul>
  <li>
    <h2>イベントA</h2>
    <div>
        2021年03月06日
    </div>
  </li>
  <li>
    <h2>イベントC</h2>
    <div>
        2021年03月13日 ~ 2021年03月20日
    </div>
  </li>
  <li>
    <h2>イベントB</h2>
    <div>
        2021年03月27日 ~ 2021年04月03日
    </div>
  </li>
</ul>

4月の場合の出力も問題なさそうです。

<h1>04月</h1>
<ul>
  <li>
    <h2>イベントB</h2>
    <div>
        2021年03月27日 ~ 2021年04月03日
    </div>
  </li>
</ul>
このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年7月
 123456
78910111213
14151617181920
21222324252627
28293031