ブログ記事の並べ替え
SearchEntriesプラグインでは、検索されたブログ記事を、ブログ記事標準のフィールドの値か、カスタムフィールドの値で並べ替えることができます。
ブログ記事のフィールドで並べ替える
並べ替え方法は、「MTSearchSortOrder」というテンプレートタグで指定します。
MTSearchSortOrderタグは、MTSearchConditionsタグのブロックの中に書きます。
ブログ記事のフィールドの値をキーにして昇順で並べ替えるには、以下のように書きます。
<$mt:SearchSortOrder sort_by="フィールド名"$>
「フィールド名」には、ブログ記事標準のフィールドの名前を、以下の表から選んで指定します。
フィールド | フィールド名 |
ID | id |
タイトル | title |
本文 | text |
続き | text_more |
概要 | excerpt |
キーワード | keywords |
公開日 | authored_on |
最終更新日 | modified_on |
出力ファイル名 | basename |
ユーザーのID | author_id |
フォーマット | convert_breaks |
コメント数 | comment_count |
トラックバック数 | ping_count |
また、降順で並べ替える場合は、以下のように「sort_order="descend"」のモディファイアも付加します。
<$mt:SearchSortOrder sort_by="フィールド名" sort_order="descend"$>
例えば、タイトルに「Movable Type」を含み、かつコメントが付いている(comment_countフィールドの値が1以上)ブログ記事を検索し、コメント数の多い順に出力するには、以下のようにテンプレートを組みます。
<mt:SearchConditions>
<$mt:SearchConditionLike field="title" values="Movable Type"$>
<$mt:SearchConditionCompare field="comment_count" ge="1"$>
<$mt:SearchSortOrder sort_by="comment_count" sort_order="descend"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<ul>
<mt:Entries>
<li><$mt:EntryTitle$>(<$mt:EntryCommentCount$>)</li>
</mt:Entries>
</ul>
</mt:IfNonZero>
カスタムフィールドの値で並べ替える
カスタムフィールドの値をキーにして並べ替える場合は、MTSearchSortOrderタグのsort_byモディファイアを、「sort_by="field:ベースネーム"」のように書きます。
例えば、ブログ記事で商品を管理するために、値段を表すカスタムフィールドを追加しているとします。
そして、そのカスタムフィールドのベースネームが「entry_price」で、テンプレートタグ名が「MTEntryPrice」だとします。
この状態で、値段が3,000円以下の商品(ブログ記事)を、値段の安い順に並べ替えて出力するには、以下のようにテンプレートを組みます。
<mt:SearchConditions>
<mt:SearchConditionCFSection field="entry_price">
<$mt:SearchConditionCFCompare le="3000"$>
</mt:SearchConditionCFSection>
<$mt:SearchSortOrder sort_by="field:entry_price"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<ul>
<mt:Entries>
<li><$mt:EntryTitle$>(<$mt:EntryPrice$>)</li>
</mt:Entries>
</ul>
</mt:IfNonZero>
また、値段の高い順に並べ替えて出力する場合、上のテンプレートのMTSearchSortOrderタグに「sort_order="descend"」のモディファイアを追加します。
複数のフィールドで並べ替える
複数のフィールドをキーにして、ブログ記事を並べ替えることもできます。
その場合は、MTSearchSortOrderタグを複数回書きます。
最優先する並べ替えのキーを、1つ目のMTSearchSortOrderタグに書きます。
次に優先するキーを、2つ目のMTSearchSortOrderタグに書きます。
以下同様に、複数のMTSearchSortOrderタグを書きます。
例えば、先ほどの「値段が3,000円以下」の例で、以下のように並べ替えたいとします。
- 値段の安い順に並べ替えます。
- 同じ値段の商品が複数ある場合は、タイトルの順に並べ替えます。
この場合は、MTSearchSortOrderタグを2回書きます。
まず値段で並べ替えるので、1つ目のMTSearchSortOrderタグで、値段で並べ替えるように指定します。
そして、2つ目のMTSearchSortOrderタグで、タイトルで並べ替えるように指定します。
実際にMTSearchConditionsタグのブロックを書くと、以下のようになります。
<mt:SearchConditions>
<mt:SearchConditionCFSection field="entry_price">
<$mt:SearchConditionCFCompare le="3000"$>
</mt:SearchConditionCFSection>
<$mt:SearchSortOrder sort_by="field:entry_price"$>
<$mt:SearchSortOrder sort_by="title"$>
</mt:SearchConditions>
MTSearchSortOrderタグを複数回書く場合、それぞれに異なるsort_orderモディファイアを指定することもできます。
例えば、前述の例で、商品を値段の高い順(降順)に並べ替え、値段が同じ商品はタイトル順(昇順)に並べ替える場合だと、MTSearchConditionsタグのブロックを以下のように書きます。
<mt:SearchConditions>
<mt:SearchConditionCFSection field="entry_price">
<$mt:SearchConditionCFCompare le="3000"$>
</mt:SearchConditionCFSection>
<$mt:SearchSortOrder sort_by="field:entry_price" sort_order="descend"$>
<$mt:SearchSortOrder sort_by="title"$>
</mt:SearchConditions>
並べ替え方法を指定しなかった場合
MTSearchSortOrderタグを入れなかった場合、ブログの「設定」→「投稿」のページの「順番」の設定に応じて、公開日時の昇順または降順でブログ記事を並べ替えます。