「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
年別アーカイブページにその年の月別アーカイブリストを出力する
MTQに、「年別アーカイブページにその年の月別アーカイブリストを出力したい」といった内容の質問があがっていました。
この質問に答えてみます。
1.考え方
月別アーカイブリストを出力するには、MTArchiveListタグに「archive_type="Monthly"」のモディファイアを付加します。
この月別アーカイブリストは、テンプレートの種類に関係なく、ブログ全体を対象にしたものになります。
質問された方の希望は、「年別アーカイブページの中では、それぞれの年の月別アーカイブリストだけを出力したい」といった内容です。
例えば、2012年の年別アーカイブページには、2012年1月~2012年12月だけの月別アーカイブリストを出力したいとのことです。
このようなことを行うには、以下のように処理をします。
- 出力中の年別アーカイブページで、そのアーカイブページの年を変数に代入します。
変数名は「archive_year」にすることにします。 - MTArchiveListタグで、ブログ全体の月別アーカイブリストを順に取り出します。
- MTArchiveListタグのブロックの中で、月別アーカイブの年と、アーカイブページの年とを比較して、両者が一致する時だけ月別アーカイブの情報を出力します。
2.テンプレートの書き方
ここまでの話に沿ってテンプレートを書くと、以下のようになります。
<$mt:ArchiveDate format="%Y" setvar="archive_year"$> <ul> <mt:ArchiveList archive_type="Monthly"> <$mt:ArchiveDate format="%Y" setvar="cur_month_year"$> <mt:If name="archive_year" eq="$cur_month_year"> <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate format="%Y年%m月"></a>(<$mt:ArchiveCount$>)</li> </mt:If> </mt:ArchiveList> </ul>
テンプレートの内容は以下の通りです。
行 | 内容 |
---|---|
1行目 | 年別アーカイブページの日付から年(%Y)を取り出し、変数archive_yearに代入します。 |
3/9行目 | MTArchiveListタグで、ブログ全体の月別アーカイブリストを順に取り出します。 |
4行目 | MTArchiveDateタグで、月別アーカイブの年を取り出し、変数cur_month_yearに代入します。 |
5行目/7行目 | MTIfタグで、変数archive_year(年別アーカイブページの年)と、変数cur_month_yearの値(月別アーカイブの年)を比較します。 |
6行目 | 5行目のMTIf文の条件が成立するときだけ、その月のアーカイブページへのリンクと、その月の記事の件数を出力します。 |
3.変数や条件判断は必須
この例のように、手の込んだ処理をしようとすると、変数や条件判断を避けて通ることができません。
拙著「Movable Type 5.1 Webサイト製作ガイドVolume 2」では、変数や条件判断について、かなり詳しく解説しています。
「変数や条件判断がよく分からない」という方は、ぜひ拙著をお読みください。