CMS

MovableType・WordPressでカテゴリーの親子関係を判定する

共有する?

このエントリーをはてなブックマークに追加
follow us in feedly
oyako

先日の記事で、階層カテゴリーの親子関係の判定のために「最上層のIDを取得する方法」について書いたわけですが。
めげずに調べていたところ、こちらの記事でもっと簡潔な方法がが紹介されていました。

WebTecNote - [WP]Category, Tag and Taxonomy Functions

ついでに、MovableTypeの場合も併せてご紹介します。
MovableTypeと比較するため、今回はWordPressの方は関数化していません。

WordPressの場合

親子関係があれば変数$flgにtrueが入ります。[親カテゴリーのID]、[親カテゴリー名]に任意の値を入れて使ってください。

cat_is_ancestor_of($cat1, $cat2)

$cat1で指定したカテゴリが$cat2の親である場合にtrueを返す。(どれだけ下の階層でもヒットすればtrue)
引数はカテゴリーIDで、数値でないと常にfalseになる。('1','4')ではなく(1,4)で指定。

WebTecNote - [WP]Category, Tag and Taxonomy Functions

親子の条件判定がコア関数にあったとは…
cat_is_ancestor_of()は本家のCodexには掲載されていますが、日本で言及している人はほとんどいません。英語を読めるようにならなければと痛感しました…

IDを関数に渡す前に(int)と型宣言をしておかなければならないのと、
現在のカテゴリーが親そのものだった場合はfalseを返す点に注意が必要です。
親そのものも判定対象にしたい場合は、別途条件を増やす必要があります。

MovableTypeの場合

独自タグ<MTIfIsDescendant>を使用します。

現在のカテゴリが、parent モディファイアで指定したカテゴリのサブカテゴリにあたるか判定する条件タグです。囲まれた内容は条件にあてはまったときにのみ処理されます。

MTIfIsDescendant | テンプレートタグリファレンス

「現在のカテゴリが、指定したカテゴリをサブカテゴリとして含んでいるか」という、逆の機能を持った<MTIfIsAncestor>も用意されています。& lt;br /> また、現在のカテゴリーが親そのものであってもtrueを返す点がWordPressの関数と異なっています。

MovableTypeの方が直感的に見えますが、parentモディファイアを一意の「ID」ではなく、「表示名」で指定しなければならない点が最大の欠点です。
「カテゴリー名は変えないでくださいね」と前置きするのを忘れて、
「コンテンツを見直したら表示が変になっちゃったんですけど…」
と、半年以上経ってからクライアントさんから問い合わせが来たこともあります(笑)


カテゴリー・フォルダ階層による条件分岐は難しいですが、使いこなせば精密なレイアウトのサイトを構築することができます。
個人のブログですと、カテゴリーごとにアフィリエイトの広告を変えるなんてのも実用的ですね。

----- EXTENDED BODY:

共有する?

このエントリーをはてなブックマークに追加
follow us in feedly

permalink

http://webbingstudio.com/weblog/cms/entry-54.html

publish