SearchEntries

対応バージョン:MovableType7

特定のカテゴリ/タグの記事を除外して検索する

更新日:2024.02.02

特定のカテゴリ/タグの記事を除外して検索する方法を紹介します。

特定カテゴリの記事を除外する

特定のカテゴリの記事を除外するには、以下のような考え方をします。

  • 1.そのカテゴリに属する記事を検索し、記事のIDを読み込みます。
  • 2.記事のIDが、1.の条件を満たさない記事を検索します。

たとえば、「カテゴリA」というカテゴリに属さない記事を検索したい場合、以下のようにSearchEntriesタグのブロックを2回書きます。

<mt:SearchConditions entry_ids="cat_a">
  <mt:SearchConditionCategorySection>
    <$mt:SearchConditionCategory category="カテゴリA"$>
  </mt:SearchConditionCategorySection>
</mt:SearchConditions>
<mt:SearchConditions>
  <$mt:SearchConditionNotValues field="id" values="$cat_a"$>
</mt:SearchConditions>

特定のタグがついた記事を除外する

特定のタグがついた記事を除外する場合も、カテゴリの除外と同じように考えます。
たとえば、「タグA」というタグがついた記事を除外して検索したい場合は、以下のようにSearchEntriesタグのブロックを2回書きます。

<mt:SearchConditions entry_ids="tag_a">
  <mt:SearchConditionTagSection>
    <$mt:SearchConditionTag tag="タグA"$>
  </mt:SearchConditionTagSection>
</mt:SearchConditions>
<mt:SearchConditions> <$mt:SearchConditionNotValues field="id" values="$tag_a"$> </mt:SearchConditions>

サブクエリが必要

上の例で挙げたように、カテゴリ/タグを除外してブログ記事を検索するには、1回目の検索の結果を、2回目の検索の中で使うという処理が必要です。
SQLでは、「サブクエリ」という手法で、このような処理を1つのSQL文にまとめることができます。
ところが、Movable TypeのORMは、サブクエリには対応していません。
そのため、上の例に挙げたように、MTSearchConditionsタグのブロックを2回書く必要があります。
ただ、上記書いたような方法では、ブログ記事が多くなるとパフォーマンスが悪化することが予想できます。

前へ
プラグインTOP
次へ
目次