「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
ブログ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のどちらかに属するブログ記事を検索します。