ブログAのカテゴリアーカイブページにブログBの記事も出力する

MTQに以下のような質問が上がっていました。

ブログAのカテゴリAの商品一覧と、ブログBの商品一覧を、カテゴリAに表示したいと考えています。

拙作のSearchEntriesプラグインを使うと、上記のような処理を行うこともできます。

考え方

ご質問のようなことを行うには、以下のどちらかの条件を満たすブログ記事を出力すれば良いです。

  • ブログAのカテゴリAに属する
  • ブログBに属する

「どちらかの条件を満たす」ということは、SearchEntriesプラグインではOR検索で行うことができます。
組み合わせる条件が2つの場合だと、一般的には以下のようにテンプレートを組めば良いです。

<mt:SearchConditions entry_ids="eid1">
  1つ目の条件を表すテンプレートタグ
</mt:SearchConditions>
<mt:SearchConditions entry_ids="eid2">
  2つ目の条件を表すテンプレートタグ
</mt:SearchConditions>
<mt:SearchConditions>
  <$mt:SearchConditionValues field="id" values="$eid1"$>
  <$mt:SearchConditionUnion op="or"$>
  <$mt:SearchConditionValues field="id" values="$eid2"$>
</mt:SearchConditions>

また、他のブログから記事を読み込むには、MTSearchConditionsタグに、include_blogsモディファイアを指定します。
例えば、IDが2番と3番のブログから記事を読み込むには、「include_blogs="2,3"」のモディファイアを指定します。

テンプレートの例

上記の話に基づいて、ブログAのカテゴリアーカイブテンプレートを書き換えます。
MTEntriesタグのブロックの前に、以下の部分を追加します。
なお、「ブログAのID」「ブログBのID」は、実際のIDに置き換えます。

<mt:If tag="CategoryLabel" eq="カテゴリA">
  <mt:SearchConditions entry_ids="eid1">
    <mt:SearchConditionCategorySection>
      <mt:SearchConditionCategory include_cats="カテゴリA">
    </mt:SearchConditionCategorySection>
  </mt:SearchConditions>
  <mt:SearchConditions include_blogs="ブログBのID" entry_ids="eid2">
  </mt:SearchConditions>
  <mt:SearchConditions include_blogs="ブログAのID,ブログBのID">
      <$mt:SearchConditionValues field="id" values="$eid1"$>
      <$mt:SearchConditionUnion op="or"$>
      <$mt:SearchConditionValues field="id" values="$eid2"$>
  </mt:SearchConditions>
</mt:If>

テンプレートの内容は以下の通りです。

1/14行目

カテゴリ名(MTCategoryLabelタグ)が「カテゴリA」の時だけ、MTIfタグのブロック内を処理します。

2~6行目

「カテゴリA」に属するブログ記事を検索し、それらのブログ記事のIDを、変数eid1に代入します。

7~8行目

ブログBに属するブログ記事を検索し、それらのブログ記事のIDを、変数eid2に代入します。

9~13行目

ブログAとブログBの中から(MTSearchConditionsタグのinlcude_blogsモディファイア)、IDがeid1/eid2のどちらかに属するブログ記事を検索します。