「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
続・ブログ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モディファイアの使い方」の記事をご参照ください。