「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
カテゴリごとに年別アーカイブのリストを出力する
MTQに、「カテゴリごとに、記事の年別アーカイブリストを出力したい」という質問がありました。
この質問に答えます。
1.質問の概要
サイト内の各カテゴリについて、以下のようなマークアップでカテゴリ年別アーカイブリストを出力したいとのことです。
<h3><a href="カテゴリアーカイブリンク先">カテゴリ名</a></h3> <ul> <li><a href="2015年の年別アーカイブリンク先">2015</a></li> <li><a href="2014年の年別アーカイブリンク先">2014</a></li> <li><a href="2013年の年別アーカイブリンク先">2013</a></li> ・・・ </ul>
2.テンプレートの組み方
上記のような出力を得るには、以下のようにテンプレートを組みます。
<mt:TopLevelCategories> <mt:If tag="CategoryCount"> <h3><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></h3> <ul> <mt:ArchiveList archive_type="Category-Yearly"> <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate format="%Y"$></a></li> </mt:ArchiveList> </ul> </mt:If> <$mt:SubCatsRecurse$> </mt:TopLevelCategories>
テンプレートの内容は以下の通りです。
2-1.1/11行目
トップレベルのカテゴリから順に繰り返します。
2-2.2/9行目
MTCategoryCountタグで各カテゴリの記事の数を調べ、記事がある(=記事数が0でない)カテゴリだけ、リストを出力します。
2-3.3行目
MTCategoryLabelタグでカテゴリ名を出力し、またMTCategoryArchiveLinkタグでそのカテゴリへのリンクを出力します。
2-4.5/7行目
各カテゴリの年別アーカイブリストを出力するために、MTArchiveListタグを使い、「archive_type="Category-Yearly"」のモディファイアを付加します。
なお、MTArchiveListタグで「archive_type="Category-Yearly"」のモディファイアを使う場合、MTArchiveListタグの単独のブロックだと、すべてのカテゴリ/年別のアーカイブのリストを順に出力する動作になります。
一方、MTTopLevelCategoriesタグのブロックの中など、カテゴリのコンテキストの中でMTArchiveListタグのブロックを実行すると、処理中のカテゴリのみのカテゴリ/年別のアーカイブのリストを出力することができます。
2-5.6行目
MTArchiveDateタグでアーカイブの年を出力し、またMTArchiveLinkタグでそのアーカイブへのリンクを出力します。
2-6.10行目
カテゴリにサブカテゴリがある場合は、カテゴリの階層を1段下って処理を続けます。