ブログ記事のフィールドどうしでのOR検索
更新日:2024.02.02
SearchEntriesプラグインでは、「ブログ記事のタイトル/本文/続きのどれかに『Movable Type』が含まれている」などの、フィールドどうしでのOR検索を行うこともできます。
MTSearchConditionUnionタグ
これまでに取り上げてきた検索条件のタグ(MTSearchConditionValues等)を単に複数回書くと、AND検索になります。
しかし、AND検索ではなくOR検索を行いたい場合もあります(この記事の冒頭にあげた例など)。
その場合は、検索条件のタグとタグの間に、「<$mt:SearchConditionUnion op="or"$>」というテンプレートタグを入れます。
例えば、冒頭で挙げた例だと、以下のように書きます。
<mt:SearchConditions>
<$mt:SearchConditionLike field="title" values="Movable Type"$>
<$mt:SearchConditionUnion op="or"$>
<$mt:SearchConditionLike field="text" values="Movable Type"$>
<$mt:SearchConditionUnion op="or"$>
<$mt:SearchConditionLike field="text_more" values="Movable Type"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<ul>
<mt:Entries>
<li>
<h1><$mt:EntryTitle$></h1>
<div><$mt:EntryBody$></div>
<div><$mt:EntryMore$></div>
</li>
</mt:Entries>
</ul>
</mt:IfNonZero>
MTSearchConditionSectionタグ
ORで結んだいくつかの条件を、他の条件とAND検索したい場合もあります。
そのような場合には、OR条件の部分を「MTSearchConditionSection」というタグのブロックで囲みます。
例えば、「タイトル/本文/続きのどれかに『Movable Type』を含み、かつコメント/トラックバックのどちらかがついている」というブログ記事を検索したいとします。
これは、以下の2つのOR検索の間を、AND検索で結ぶ形になっています。
- タイトル/本文/続きのどれかに『Movable Type』を含む
- コメント数またはトラックバック数が1以上
そこで、2つのOR検索の部分を、それぞれMTSearchConditionSectionタグのブロックで囲みます。
タグを組むと以下のようになります。
<mt:SearchConditions>
<mt:SearchConditionSection>
<$mt:SearchConditionLike field="title" values="Movable Type"$>
<$mt:SearchConditionUnion op="or"$>
<$mt:SearchConditionLike field="text" values="Movable Type"$>
<$mt:SearchConditionUnion op="or"$>
<$mt:SearchConditionLike field="text_more" values="Movable Type"$>
</mt:SearchConditionSection>
<mt:SearchConditionSection>
<$mt:SearchConditionCompare field="comment_count" ge="1"$>
<$mt:SearchConditionUnion op="or"$>
<$mt:SearchConditionCompare field="ping_count" ge="1"$>
</mt:SearchConditionSection>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<ul>
<mt:Entries>
<li>
<h1><$mt:EntryTitle$>(コメント:<$mt:EntryCommentCount$> トラックバック:<$mt:EntryTrackbackCount$>)</h1>
<div><$mt:EntryBody$></div>
<div><$mt:EntryMore$></div>
</li>
</mt:Entries>
</ul>
</mt:IfNonZero>