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

先日の「ブログAのカテゴリアーカイブページにブログBの記事も出力する」の続編で、2つのバリエーションをご紹介します。

1.ブログAの各カテゴリのアーカイブページにブログBの記事を混在させて出力する

先日の記事は、ブログAのカテゴリAのカテゴリアーカイブページだけに、ブログBの記事を混在させて出力する例でした。
しかし、以下のように、ブログAのそれぞれのカテゴリアーカイブページに、ブログBの記事を混在させて出力したい場合もあります。

  • ブログAのカテゴリAのアーカイブページには、ブログAのカテゴリAの記事とブログBの記事を混在して出力する
  • ブログAのカテゴリBのアーカイブページには、ブログAのカテゴリBの記事とブログBの記事を混在して出力する
  • ブログAのカテゴリCのアーカイブページには、ブログAのカテゴリCの記事とブログBの記事を混在して出力する
  • 以下同様

この場合だと、ブログAのカテゴリアーカイブテンプレートで、MTEntriesタグのブロックの前に以下を挿入します。

<$mt:CategoryID setvar="cat_id"$>
<mt:SearchConditions entry_ids="eid1">
  <mt:SearchConditionCategorySection>
    <mt:SearchConditionCategoryID include_cat_ids="$cat_id">
  </mt:SearchConditionCategorySection>
</mt:SearchConditions>
<mt:SearchConditions include_blogs="ブログBのID" entry_ids="eid2">
</mt:SearchConditions>
<mt:SearchConditions include_blogs="ブログAのID,ブログBのID">
  <mt:SearchConditionSection>
    <$mt:SearchConditionValues field="id" values="$eid1"$>
    <$mt:SearchConditionUnion op="or"$>
    <$mt:SearchConditionValues field="id" values="$eid2"$>
  </mt:SearchConditionSection>
</mt:SearchConditions>

1~6行目は、各カテゴリのブログ記事を読み込む条件を指定する部分です。
1行目で、カテゴリのIDを変数cat_idに代入します。
そして、3~5行目で、カテゴリのIDが変数cat_idの値と一致しているブログ記事を読み込みます。

7~8行目は、ブログBの記事を読み込む条件を指定する部分です。

そして、9~15行目で、上記2つの条件のどちらかを満たすブログ記事を読み込みます。

2.一部のカテゴリだけブログBの記事を混在して出力する

すべてのカテゴリのアーカイブページではなく、一部のカテゴリのアーカイブページだけで、そのカテゴリの記事とブログBの記事を混在して出力したい場合もあります。
例えば、以下のような場合です。

  • ブログAのカテゴリAのアーカイブページには、ブログAのカテゴリAの記事とブログBの記事を混在して出力する
  • ブログAのカテゴリBのアーカイブページには、ブログAのカテゴリBの記事とブログBの記事を混在して出力する
  • ブログAのカテゴリCのアーカイブページには、ブログAのカテゴリCの記事とブログBの記事を混在して出力する
  • ブログAの上記以外のカテゴリのアーカイブページには、そのカテゴリの記事だけを出力する

この場合だと、上記のテンプレートの最初のMTSearchConditionsタグと、最後の閉じタグの間をMTIfタグのブロックで囲み、以下のように条件を追加します。

<$mt:CategoryID setvar="cat_id"$>
<mt:If test="grep { $_ == $cat_id } (カテゴリAのID,カテゴリBのID,カテゴリCのID)">
<mt:SearchConditions entry_ids="eid1">
  <mt:SearchConditionCategorySection>
    <mt:SearchConditionCategoryID include_cat_ids="$cat_id">
  </mt:SearchConditionCategorySection>
</mt:SearchConditions>
<mt:SearchConditions include_blogs="ブログBのID" entry_ids="eid2">
</mt:SearchConditions>
<mt:SearchConditions include_blogs="ブログAのID,ブログBのID">
  <mt:SearchConditionSection>
    <$mt:SearchConditionValues field="id" values="$eid1"$>
    <$mt:SearchConditionUnion op="or"$>
    <$mt:SearchConditionValues field="id" values="$eid2"$>
  </mt:SearchConditionSection>
</mt:SearchConditions>
</mt:If>

2行目のMTIfタグは、変数cat_id(再構築中のカテゴリのID)が、カテゴリA/カテゴリB/カテゴリCのどれかのIDと一致するかどうかを調べることを意味します。

なお、この例ではカテゴリが3つですが、4つ以上の場合も、それらのカテゴリのIDをコンマで区切って並べればOKです。
また、MTIfタグのtestモディファイアの詳細については、「testモディファイアの使い方」の記事をご参照ください。