「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
ブログ記事が属するカテゴリをツリー形式で出力するプラグイン(その2)
昨日に続いて、EntrySubCategoriesプラグインで追加されるテンプレートタグを解説します。
このプラグインの解説はこれで終わりです。
1.MTEntryTopLevelCategories
以下のどちらかの条件を満たすトップレベルカテゴリを出力します。
- ブログ記事が属するトップレベルカテゴリ
- 下の階層のカテゴリにブログ記事が属するトップレベルカテゴリ
また、MTEntryTopLevelCategoriesタグは、MTEntriesタグのブロックの中や、ブログ記事アーカイブテンプレートなど、MTEntry系のタグを使えるところでを使うことができます。
例えば、以下のカテゴリ構造のブログで、あるブログ記事が、「★」のついているカテゴリに属しているとします。
「地域」「部屋のタイプ」「設備」がトップレベルカテゴリです。
- 地域
- ★東京
- 部屋のタイプ
- ★シングル
- ★ダブル
- ツイン
- 設備
- 無線LAN
- 大浴場
このブログ記事で、MTEntryTopLevelCategoriesタグのブロックを組むとします。
トップレベルカテゴリの「地域」「部屋のタイプ」「設備」のうち、ブログ記事が直接に属しているカテゴリはありません。
一方、トップレベルカテゴリの中で、「地域」と「部屋のタイプ」のカテゴリでは、その下の階層のカテゴリにブログ記事が属しています。
したがって、MTEntryTopLevelCategoiresタグのブロックでは、「地域」と「部屋のタイプ」のカテゴリが出力されます。
2.MTEntrySubCategoriesタグ
MTEntrySubCategoriesタグは、あるカテゴリを基準に、MTTopLevelCategoriesタグと同じような処理を行うタグです。
MTEntriesタグのブロックの中や、ブログ記事アーカイブテンプレートなど、MTEntry系のタグを使えるところでを使うことができます。
2-1.1つ目の書き方
書き方は2通りあります。
1つ目の書き方は以下の通りです。
<mt:EntrySubCategories category="カテゴリ名"> ・ ・(カテゴリの情報を出力するタグ等) ・ </mt:EntrySubCategories>
この場合、「カテゴリ名」で指定したカテゴリの直下の階層のカテゴリのうち、以下のどちらかの条件を満たすカテゴリだけが出力されます。
- そのカテゴリにブログ記事が属している
- そのカテゴリより下の階層のカテゴリにブログ記事が属している
例えば、前述の図のようにブログ記事がカテゴリに属している場合に、以下のようにタグを書くとします。
<mt:EntrySubCategories category="部屋のタイプ"> <li><$mt:CategoryLabel$></li> </mt:EntrySubCategories>
前述のブログ記事では、「部屋のタイプ」カテゴリの直下の「シングル」「ダブル」「ツイン」のカテゴリのうち、「シングル」と「ダブル」のカテゴリに属しています。
したがって、上のタグの出力は以下のようになります。
<li>シングル</li> <li>ダブル</li>
2-2.2つ目の書き方
2つ目の書き方は以下の通りです。
<mt:EntrySubCategories category="カテゴリ名" include_current="1"> ・ ・(カテゴリの情報を出力するタグ等) ・ </mt:EntrySubCategories>
この場合、「カテゴリ名」で指定するカテゴリか、その下の階層のカテゴリにブログ記事が属していれば、「カテゴリ名」で指定したカテゴリを出力します。
属していなければ、何も出力しません。
例えば、前述の図のようにブログ記事がカテゴリに属している場合に、以下のようにタグを書くとします。
<mt:EntrySubCategories category="部屋のタイプ" include_current="1"> <li><$mt:CategoryLabel$></li> </mt:EntrySubCategories>
このブログ記事は、「部屋のタイプ」カテゴリに直接には属していませんが、その下の階層の「シングル」「ダブル」のカテゴリには属しています。
したがって、上のタグで「部屋のタイプ」カテゴリの情報が以下のように出力されます。
<li>部屋のタイプ</li>
3.MTEntrySubCatsRecurseタグ
現在処理中のカテゴリから1段下の階層に下って、MTEntryTopLevelCategoriesまたはMTEntrySubCategoriesタグのブロックの処理を続けます。
再帰的にカテゴリを下って、ブログ記事が属するカテゴリをツリー状に出力するために使います。
4.MTEntrySortedTopLevelCategories/MTEntrySortedSubCategoriesタグ
MTEntryTopLevelCateogires/MTEntrySubCategoriesタグとほぼ同じ動作をします。
ただ、拙作のSortCatFldプラグインまたはSuperSortプラグインがインストールされている場合は、指定した並び順に沿ってカテゴリを出力します。
5.MTEntryIfInCategoryタグ
MTEntryTopLevelCategoriesタグなどのブロックの中では、ブログ記事が直接に属しているカテゴリだけでなく、その上の階層のカテゴリも出力されます。
そのため、カテゴリを出力する際に、実際にブログ記事が属しているカテゴリか、あるいはその上の階層のカテゴリかで、処理を分けたい場合も考えられます。
このような判断は、「MTEntryIfInCategory」というブロックタグで行うことができます。
現在処理中のカテゴリにブログ記事が実際に属しているときだけ、このタグのブロック内が処理されます。
例えば、最初にあげた図のように、ブログ記事がカテゴリに属しているとします。
そして、ブログ記事が属するカテゴリをツリー状に出力するとします。
さらに、ブログ記事が実際に属するカテゴリでは、カテゴリ名の前に「★」マークを表示したいとします。
この場合は、以下のようにタグを組みます。
<mt:EntryTopLevelCategories> <mt:SubCatIsFirst><ul></mt:SubCatIsFirst> <li><mt:EntryIfInCategory>★</mt:EntryIfInCategory><$mt:CategoryLabel$> <$mt:EntrySubCatsRecurse$> </li> <mt:SubCatIsLast></ul></mt:SubCatIsLast> </mt:EntryTopLevelCategories>