Movable Typeで親カテゴリに子カテゴリのエントリー数の合計を表示する

Movable Typeで親カテゴリに子カテゴリのエントリー数の合計を表示する

Movable Typeでカテゴリ「A」の中にカテゴリ「B」があり、カテゴリ「B」に「1」というエントリーがある場合、カテゴリ「A」にもエントリー「1」は含まれていて、親カテゴリであるカテゴリ「A」のアーカイブページには、カテゴリ「B」などの子カテゴリに含まれるエントリーがずらりと並んでいてほしいのですが、Movable Typeはデフォルトではそういう扱いはしてくれません。

カテゴリ「A」のアーカイブリストにエントリー「1」を含めるための作業のまとめです。

アーカイブリストを出力するようにファイルを書き換えた後、カテゴリの表示に関わるテンプレートやウィジェットを修正しました。

アーカイブリスト出力

Movable Type 5.2.2から、記事のないカテゴリのアーカイブリストが出力されなくなりました。
Category.pmを書き換えるとアーカイブリストを出力することができますが、他の部分で不具合が出てくる可能性もあるそうです。

/mt/lib/MT/ArchiveType/Category.pmの166行目を以下のように書き換えます。

書き換え前

MT::ArchiveType::archive_entries_count( $obj, \%params );

書き換え後

return 1;

テンプレートの修正

「デザイン」→「テンプレート」の「カテゴリ別ブログ記事リスト」を修正します。
以下のようにMTEntriesタグをMTEntriesWithSubCategoriesタグに書き換えます。

書き換え前

<mt:Entries limit="$limit">
<$mt:Include module="ブログ記事の概要"$>
</mt:Entries>

書き換え後

<mt:EntriesWithSubCategories limit="$limit">
<$mt:Include module="ブログ記事の概要"$>
</mt:EntriesWithSubCategories>

ウィジェットの修正

「デザイン」→「ウィジェット」の「カテゴリアーカイブ」を修正します。

修正前

<mt:IfArchiveTypeEnabled archive_type="Category">
<div class="widget_category widget">
<h4>category</h4>
<mt:TopLevelCategories>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<mt:If tag="CategoryCount">
<li><a href="<$mt:CategoryArchiveLink$>"<mt:If tag="CategoryDescription"> title="<$mt:CategoryDescription remove_html="1" encode_html="1"$>"</mt:If>><$mt:CategoryLabel$> (<$mt:CategoryCount$>)</a>
<mt:Else>
<li><$mt:CategoryLabel$>
</mt:If>
<$mt:SubCatsRecurse$>
</li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:TopLevelCategories>
<!-- .widget_category/.widget --></div>
</mt:IfArchiveTypeEnabled>

修正後

<mt:IfArchiveTypeEnabled archive_type="Category">
<div class="widget_category widget">
<h4>category</h4>
<mt:TopLevelCategories>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<mt:EntriesWithSubCategories>
<mt:EntriesFooter>
<mt:GetVar name="__counter__" setvar="entry_count" />
</mt:EntriesFooter>
</mt:EntriesWithSubCategories>
<mt:If name="entry_count">
<li><a href="<$mt:CategoryArchiveLink$>"<mt:If tag="CategoryDescription"> title="<$mt:CategoryDescription remove_html="1" encode_html="1"$>"</mt:If>><$mt:CategoryLabel$> (<mt:If tag="CategoryCount"><$mt:CategoryCount$><mt:Else><mt:GetVar name="entry_count" /></mt:If>)</a>
<mt:Else>
<li><$mt:CategoryLabel$>
</mt:If>
<$mt:SubCatsRecurse$>
</li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:TopLevelCategories>
<!-- .widget_category/.widget --></div>
</mt:IfArchiveTypeEnabled>

エントリーのないカテゴリも、エントリーが1件あるような表示になってしまいますが、解決方法が分からなかったため、そのままにしています…。

参考サイト

下のボタンを押すと拍手送信&メッセージフォームが開きます。→WEB拍手お返事