ブログ記事のページに同一カテゴリ月別アーカイブリストを出力する

MTQで、「個々のブログ記事のページに、そのブログ記事が属するカテゴリのカテゴリ月別アーカイブリストを出力したい」という質問が出ていました。
その方法を紹介します。

1.基本的な考え方

カテゴリ月別アーカイブリストを出力するには、MTArchiveListタグに「archite_type="Category-Monthly"」のモディファイアを付加します。
ただ、コンテキストによって、出力される内容が以下のように異なります。

コンテキスト出力される内容
カテゴリの情報がコンテキストにセットされている時そのカテゴリだけのカテゴリ月別アーカイブリスト
カテゴリの情報がコンテキストにセットされていない時すべてのカテゴリのカテゴリ月別アーカイブリスト

ブログ記事アーカイブテンプレートの中では、カテゴリの情報はコンテキストにセットされていません。
そのため、質問にあったように、すべてのカテゴリのカテゴリ月別アーカイブリストが出力されてしまいます。

そこで、まずMTEntryPrimaryCategoryタグを使って、ブログ記事が属するカテゴリの情報をコンテキストにセットします。
そして、そのブロックの中で、MTArchiveListタグを使って、カテゴリ月別アーカイブリストを出力するようにします。

2.テンプレートの例

上記の話に沿って、クラシックブログテーマで同一カテゴリ月別アーカイブリストを出力する部分を作ると、以下のようになります。

<mt:If name="entry_template">
  <mt:IfArchiveTypeEnabled archive_type="Category-Monthly">
    <mt:EntryPrimaryCategory>
      <mt:ArchiveList archive_type="Category-Monthly">
        <mt:ArchiveListHeader>
          <div class="widget-archive-current-category-monthly widget-archive widget">
            <h3 class="widget-header"><$mt:CategoryLabel$>: 月別アーカイブ</h3>
            <div class="widget-content">
              <ul>
        </mt:ArchiveListHeader>
                <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate format="%Y年%m月"$></a></li>
        <mt:ArchiveListFooter>
              </ul>
            </div>
          </div>
        </mt:ArchiveListFooter>
      </mt:ArchiveList>
    </mt:EntryPrimaryCategory>
  </mt:IfArchiveTypeEnabled>
</mt:If>

1行目と2行目で、ブログ記事のテンプレートを再構築している時で、かつカテゴリ月別アーカイブが有効な時だけ、3行目以降を再構築します。
次に、3行目のMTEntryPrimaryCategoryタグで、ブログ記事が属する主カテゴリをコンテキストをセットします。
そして、4~17行目のMTArchiveListタグのブロックで、カテゴリ月別アーカイブリストを出力します。

なお、MTEntryPrimaryCategoryタグを使ったので、ブログ記事の主カテゴリのカテゴリ月別アーカイブリストだけが出力されます。
ブログ記事が属するすべてのカテゴリを対象にしたい場合は、MTEntryPrimaryCategoryタグをMTEntryCategoriesタグに置き換えます。

また、MTEntryPrimaryCategoryタグは、Movable Type 5.1で追加されました。
Movable Type 5.0xの場合は、拙作のEntryCategoriesExプラグインを使えば、上記のテンプレートが動作するはずです。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください