開始日/終了日の間のブログ記事一覧を出力する

MTQで、以下のようなことを行いたいという質問がありました。

  • 1.ブログ記事に「開始日」「終了日」のカスタムフィールドがある
  • 2.個々のブログ記事のページに、開始日/終了日のカスタムフィールドで指定した期間のブログ記事一覧を出力する
  • 3.2.の後に、2.の期間に入らないブログ記事の一覧を出力する

拙作のSearchEntriesプラグインを使うと、上記を実現することができます。
その方法を紹介します。

1.指定した期間のブログ記事を出力する

SearchEntriesプラグインでは、「ブログ記事のフィールドの値が○○より大きい(小さい)」という条件判断を行う「MTSearchConditionCompare」というテンプレートタグがあります。
このタグを使って、「記事の日付(authored_on)フィールドの値が、開始日以上かつ終了日以下」という条件を指定すれば、指定した期間のブログ記事を出力することができます。

開始日/終了日のカスタムフィールドに、それぞれ「MTEntryStartDate」「MTEntryEndDate」というテンプレートタグを付けたとします。
この場合、ブログ記事アーカイブテンプレートに以下のような部分を入れると、それぞれの記事に、開始日/終了日のフィールドで指定した期間のブログ記事一覧を出力することができます。

<$mt:EntryStartDate format="%Y%m%d000000" setvar="start_date"$>
<$mt:EntryEndDate format="%Y%m%d235959" setvar="end_date"$>
<mt:SearchConditions>
  <$mt:SearchConditionCompare field="authored_on" ge="$start_date" le="$end_date"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchFoundEntryCount">
  <ul>
    <mt:SearchLoadedEntries>
    <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a>(<$mt:EntryDate$>)</li>
    </mt:SearchLoadedEntries>
  </ul>
</mt:IfNonZero>

2.指定した期間に入らないブログ記事を出力する

元の質問では、指定した期間に入るブログ記事だけでなく、その期間に入らないブログ記事も出力したいとのことでした。
この場合、「記事の日付(authored_on)フィールドの値が、開始日より小さいか、または終了日より大きい」という条件でブログ記事を検索します。

先ほどの「○○以上□□以下」の条件は、2つの条件のANDなので、1つのMTSearchConditionCompareタグで表すことができます。
一方、「○○より小さいか、または□□より大きい」の条件は、2つの条件のORになるため、MTSearchConditionSectionタグの中にMTSearchConditionCompareタグを2回書き、それらの条件を<$MTSearchConditionUnion op="or"$>のタグで結びます。

前述の1.の部分によって、すでに変数start_date/end_dateに値を代入してあるとします。
この場合、開始日より前または終了日より後のブログ記事を出力するには、以下のようにテンプレートを組みます。

<mt:SearchConditions>
  <mt:SearchConditionSection>
    <$mt:SearchConditionCompare field="authored_on" lt="$start_date"$>
    <$mt:SearchConditionUnion op="or"$>
    <$mt:SearchConditionCompare field="authored_on" gt="$end_date"$>
  </mt:SearchConditionSection>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchFoundEntryCount">
  <ul>
    <mt:SearchLoadedEntries>
    <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a>(<$mt:EntryDate$>)</li>
    </mt:SearchLoadedEntries>
  </ul>
</mt:IfNonZero>

ただし、この書き方では、開始日より前または終了日より後のすべてのブログ記事を出力します。
そのため、ブログ記事の件数が増えていくと、個々のブログ記事のページに出力される記事の件数も増えて、再構築にかかる時間が加速度的に長くなっていくという問題があります。

そこで、開始日より前または終了日より後のすべてのブログ記事を出力せずに、件数を限定することが望ましいです。
MTSearchConditionsタグのブロックの中に、<mt:SearchLimit limit="件数">のようなタグを入れると、出力する件数を限定することができます。

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