ブログ記事詳細検索プラグイン(その9・カスタムフィールドでの検索の基本)

SearchEntriesプラグインでは、カスタムフィールドでの検索を行うこともできます。

1.MTSearchConditionCFSectionタグ

カスタムフィールドで検索するには、フィールドごとに「MTSearchConditionCFSection」というタグのブロックを作り、そのブロックの中に条件を指定するタグを書きます。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="カスタムフィールドのベースネーム">
    カスタムフィールドの検索条件を指定するタグ
  </mt:SearchConditionCFSection>
</mt:SearchConditions>

fieldモディファイアで、検索対象のカスタムフィールドのベースネームを指定します。
ベースネームは、カスタムフィールドの作成の際に、「ベースネーム」の欄に設定した値です。

カスタムフィールドのベースネーム

2.検索条件を指定するテンプレートタグ

カスタムフィールドでの検索条件は、以下のテンプレートタグで指定します。
いずれのテンプレートタグも、ブログ記事のフィールドを検索する場合と書き方は同じです。
ただし、テンプレートタグ名に「CF」が入っていることと、fieldモディファイアを指定しない点が異なります。

条件テンプレートタグ
値が○○に等しい<$mt:SearchConditionCFValues values="値1","値2",・・・,"値n"$>
値に○○を含む<$mt:SearchConditionCFLike values="値"$>
値が○○より大きい等<$mt:SearchConditionCFCompare 演算子="値"$>
値が○○以上□□以下等<$mt:SearchConditionCFCompare 演算子1="値1" 演算子2="値2"$>

ただし、MTSearchConditionCFCompareタグで値を数値として比較できるようにしたい場合は、拙作のNumericCustomFieldsプラグインをインストールして、数値型のカスタムフィールドに値を入力しておく必要があります。
Movable Type標準のカスタムフィールドの型では、値は文字列として扱われますので、数値としての比較が正しく行われません。

3.検索の事例

ブログ記事に商品のデータを入力することを想定して、以下の表のようにカスタムフィールドを定義しているとします。
また、値も入力しているものとします。

カスタムフィールドカスタムフィールドの種類ベースネームテンプレートタグ
値段整数entry_priceMTEntryPrice
サイズテキストentry_sizeMTEntrySize
おすすめチェックボックスentry_recommendMTEntryRecommend

値段は、拙作のNumericCustomFieldsプラグインを使って、整数の値で入力してあるものとします。
また、サイズには「S,M,L」など、複数のサイズをコンマで区切って入力してあるものとします。

3-1.おすすめ商品を検索

お勧め商品(「おすすめ」のチェックボックスがオンになっている)商品を検索する場合、MTSearchConditionCFValuesタグを使って、「entry_recommendカスタムフィールドの値が1になっている」という条件で検索します。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_recommend">
    <$mt:SearchConditionCFValues values="1"$>
  </mt:SearchConditionCFSection>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>(<$mt:EntryRecommend$>)</li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

3-2.SかMのサイズがある商品を検索

SかMのサイズがある商品を検索するには、MTSearchConditionsCFLikeタグを使って、「entry_sizeフィールドの値にSかMを含む」という条件で検索します。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_size">
    <$mt:SearchConditionCFLike values="S,M"$>
  </mt:SearchConditionCFSection>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>(<$mt:EntrySize$>)</li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

3-3.1,000円以上2,000円未満の商品を検索

1,000円以上2,000円未満の商品を検索するには、MTSearchConditionsCFCompareタグを使って、「entry_priceフィールドの値が1,000以上2,000未満」という条件で検索します。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_price">
    <$mt:SearchConditionCFCompare ge="1000" lt="2000"$>
  </mt:SearchConditionCFSection>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>(<$mt:EntryPrice$>)</li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

4.SearchEntriesプラグイン関係の記事の一覧

SearchEntriesプラグイン関係のその他の記事は、以下のリンクから参照できます。