「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
条件に合う記事を元にカレンダーを出力するプラグイン(その2)
昨日の続きで、条件に合う記事を元にカレンダーを出力するプラグインを紹介します。
今日は、日付型のカスタムフィールドの値でブログ記事をまとめて、カレンダーを出力する例を取り上げます。
1.事例
例えば、「イベント日時」というカスタムフィールドを追加しているとします。
また、このカスタムフィールドには、「entry_eventdate」というベースネームを付けているとします。
この状況で、2012年1月~12月のイベント(「イベント日時」フィールドの値が2012年1月1日以上、2013年1月1日未満)の、月ごとのカレンダーを出力したいとします。
2.ブログ記事の検索
まず、SearchEntriesプラグインを使って、2012年1月~12月のイベントを検索します。
この部分のテンプレートを書くと、以下のようになります。
<mt:SearchConditions> <mt:SearchConditionCFSection field="entry_eventdate"> <$mt:SearchConditionCFCompare ge="20120101000000" lt="20130101000000"$> </mt:SearchConditionCFSection> </mt:SearchConditions>
2~4行目のMTSearchConditionCFSectionタグのブロックで、「イベント日時」フィールド(field="entry_eventdate")の値が、2012年1月1日0時0分0秒以上(ge="20120101000000")かつ、2013年1月1日0時0分0秒未満(lt="20120101000000")のブログ記事を検索します。
3.カレンダーの出力
次に、検索したブログ記事を元に、「イベント日時」カスタムフィールドの日付で月ごとにブログ記事をまとめて、カレンダーを出力します。
この部分のテンプレートを書くと、以下のようになります。
<mt:SearchEntriesArchiveList field="field:entry_eventdate"> <h2><$mt:ArchiveDate format="%Y年%m月"$></h2> <table border="1"> <tr><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th><th>日</th></tr> <mt:SearchEntriesCalendar> <mt:CalendarWeekHeader><tr></mt:CalendarWeekHeader> <td<mt:CalendarIfToday> class="today"</mt:CalendarIfToday>> <mt:CalendarIfBlank> </mt:CalendarIfBlank> <mt:CalendarIfEntries><mt:Entries lastn="1"><a href="<$mt:EntryPermalink$>"><$mt:CalendarDay$></a></mt:Entries></mt:CalendarIfEntries> <mt:CalendarIfNoEntries><$mt:CalendarDay$></mt:CalendarIfNoEntries> </td> <mt:CalendarWeekFooter></tr></mt:CalendarWeekFooter> </mt:SearchEntriesCalendar> </table> </mt:SearchEntriesArchiveList>
上記のテンプレートの内容は、以下の通りです。
1/15行目
MTSearchEntriesArchiveListタグで、「イベント日時」カスタムフィールドの値でブログ記事を月ごとにまとめ、順に出力します。
2行目
MTArchiveDateタグで、個々の月名を出力します。
5/13行目
MTSearchEntriesCalendarタグで、1日ずつ順にカレンダーを出力します。
6行目
週の最初の曜日の時には(MTCalendarWeekHeader)、行の先頭の<tr>タグを出力します。
7行目
個々の日のセルの<td>タグを出力します。
その際に、今日の日付であれば、「class="today"」のクラスを付加します。
8行目
空白のセル(1日の前や、月の最後の日の後)の場合は、空白を出力します。
9行目
イベントがある日(その日のブログ記事がある=MTCalendarIfEntries)の場合は、MTCalendarDayタグでその日付を出力します。また、その日のブログ記事から1件取り出し、その記事へのリンクを出力します。
10行目
イベントがない日(その日のブログ記事がない=MTCalendarIfBlank)の場合は、MTCalendarDayタグで日付だけを出力します。
12行目
週の最後の曜日の時には(MTCalendarWeekFooter)、行の最後の</tr>タグを出力します。