「ブログ記事のフィールドの値が○○に等しい」場合の検索
SearchEntriesプラグインでは、検索条件を柔軟に指定することができます。
その第一歩として、「ブログ記事のフィールドの値が○○に等しい」という条件で検索する方法を解説します。
SearchConditionsタグと検索条件
SearchEntriesプラグインでは、「SearchConditions」というブロックタグの中に、検索の条件を書いていきます。
そして、検索されたブログ記事は、MTEntriesタグで出力します。
ただし、検索にヒットする記事が全くないと、MTEntriesタグが通常の動作(MTSearchConditionsタグがない時と同じ動作)をしてしまいます。
そこで、MTEntriesタグを「<mt:IfNonZero tag="SearchLoadedEntryCount">」と「</mt:IfNonZero>」のタグのブロックで囲み、検索にヒットする記事があるときだけ、検索結果を出力をするようにします。
ここまでの話をまとめると、基本的なタグの組み方は、以下のようになります。
<mt:SearchConditions>
検索条件を指定するタグ
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<mt:Entries>
検索された個々のブログ記事を出力するタグ等
</mt:Entries>
</mt:IfNonZero>MTSearchConditionValuesタグ
「フィールドの値が○○に等しい」という条件で検索するには、「MTSearchConditionValues」というタグを使います。
MTSearchConditionValuesタグの書き方は、以下のようになります。
<$mt:SearchConditionValues field="フィールド名" values="値1","値2"・・・$>fieldモディファイアの「フィールド名」には、ブログ記事のフィールドを表す値を、以下の表から指定します。
| フィールド | フィールド名 |
| ID | id |
| タイトル | title |
| 本文 | text |
| 続き | text_more |
| 概要 | excerpt |
| キーワード | keywords |
| 公開日 | authored_on |
| 最終更新日 | modified_on |
| 出力ファイル名 | basename |
| ユーザーのID | author_id |
| フォーマット | convert_breaks |
| コメント数 | comment_count |
| トラックバック数 | ping_count |
また、valuesモディファイアには、比較対象の値を指定します。
「values="値"」のように、値を1つだけ書くと、フィールドがその値に等しいブログ記事が検索されます。
また、「values="値1","値2",・・・」のように値を複数書くと、フィールドが値1、値2・・・のどれかに等しいブログ記事が検索されます。
なお、値に「0」を指定することはできません(MT内部のロジックの仕様であるようです)。
ただし、数値のフィールドであれば、後日紹介するMTSearchConditionCompareというタグで、値が「0」のフィールドも検索することができます。
複数のフィールドで検索
MTSearchConditionsタグのブロックの中にMTSearchConditionValuesタグを複数回書くと、複数のフィールドを組み合わせた検索を行うこともできます。
事例
事例をいくつかあげておきます。
1.IDが1番のユーザーが書いたブログ記事を検索する
ユーザーのIDで検索するには、「author_id」フィールドを検索条件に指定します。
<mt:SearchConditions>
<$mt:SearchConditionValues field="author_id" values="1"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<ul>
<mt:Entries>
<li><$mt:EntryTitle$>, <$mt:EntryAuthorID$></li>
</mt:Entries>
</ul>
</mt:IfNonZero>2.コメントが1~3件ついているブログ記事を検索する
コメント数で検索するには、「comment_count」フィールドを検索条件に指定します。
また、「コメントが1~3件」という条件なので、valuesモディファイアを「values="1","2","3"」と書きます。
<mt:SearchConditions>
<$mt:SearchConditionValues field="comment_count" values="1","2","3"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<ul>
<mt:Entries>
<li><$mt:EntryTitle$>, <$mt:EntryCommentCount$></li>
</mt:Entries>
</ul>
</mt:IfNonZero>3.IDが1番のユーザーが書いていて、かつコメントが1~3件ついているブログ記事を検索する
MTSearchConditionsタグのブロックの中に、MTSearchConditionValuesタグを2回書き、「author_idフィールドの値が1」と、「comment_countフィールドの値が1、2、3のどれか」の2つの条件を指定します。
<mt:SearchConditions>
<$mt:SearchConditionValues field="author_id" values="1"$>
<$mt:SearchConditionValues field="comment_count" values="1","2","3"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<ul>
<mt:Entries>
<li><$mt:EntryTitle$>, <$mt:EntryAuthorID$>, <$mt:EntryCommentCount$></li>
</mt:Entries>
</ul>
</mt:IfNonZero>