カスタムフィールドでの検索の基本
SearchEntriesプラグインでは、カスタムフィールドでの検索を行うこともできます。
MTSearchConditionCFSectionタグ
カスタムフィールドで検索するには、フィールドごとに「MTSearchConditionCFSection」というタグのブロックを作り、そのブロックの中に条件を指定するタグを書きます。
<mt:SearchConditions>
<mt:SearchConditionCFSection field="カスタムフィールドのベースネーム">
カスタムフィールドの検索条件を指定するタグ
</mt:SearchConditionCFSection>
</mt:SearchConditions>
fieldモディファイアで、検索対象のカスタムフィールドのベースネームを指定します。
ベースネームは、カスタムフィールドの作成の際に、「ベースネーム」の欄に設定した値です。
検索条件を指定するテンプレートタグ
カスタムフィールドでの検索条件は、以下のテンプレートタグで指定します。
いずれのテンプレートタグも、ブログ記事のフィールドを検索する場合と書き方は同じです。
ただし、テンプレートタグ名に「CF」が入っていることと、fieldモディファイアを指定しない点が異なります。
条件 | テンプレートタグ |
値が○○に等しい | <$mt:SearchConditionCFValues values="値1","値2",・・・,"値n"$> |
値に○○を含む | <$mt:SearchConditionCFLike values="値"$> |
値が○○より大きい等 | <$mt:SearchConditionCFCompare 演算子="値"$> |
値が○○以上□□以下等 | <$mt:SearchConditionCFCompare 演算子1="値1" 演算子2="値2"$> |
ただし、MTSearchConditionCFCompareタグで値を数値として比較できるようにしたい場合は、NumericCustomFieldsプラグインをインストールして、数値型のカスタムフィールドに値を入力しておく必要があります。
Movable Type標準のカスタムフィールドの型では、値は文字列として扱われますので、数値としての比較が正しく行われません。
検索の事例
ブログ記事に商品のデータを入力することを想定して、以下の表のようにカスタムフィールドを定義しているとします。
また、値も入力しているものとします。
カスタムフィールド | カスタムフィールド種類 | ベースネーム | テンプレートタグ |
値段 | 整数 | entry_price | MTEntryPrice |
サイズ | テキスト | entry_size | MTEntrySize |
おすすめ | チェックボックス | entry_recommend | MTEntryRecommend |
値段は、NumericCustomFieldsプラグインを使って、整数の値で入力してあるものとします。
また、サイズには「S,M,L」など、複数のサイズをコンマで区切って入力してあるものとします。
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>
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.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>