2011年10月22日土曜日

get_the_categoryで親と子の取得順序[Wordpress]

あるWebの規約で、必ず親カテゴリと小カテゴリに一個ずつチェックをつけて記事を投稿するというのがありました。

元々は小カテゴリは不要で、親カテゴリの記事の一覧を作るだけのページだけど、もし万が一親カテゴリの記事が100件とかに増えてしまった場合、小カテゴリで区切って表示させようという意図があります。
なので、今回のコーディングでは小カテゴリは完全に無視して、親カテゴリだけを扱って、もし小カテゴリで分ける必要が出てくれば再コーディングするということです。

まぁこんなページで親カテゴリ名を取得しようとした時のこと。

while ($query->have_posts()) {
    $query->the_post();
     // カテゴリ取得
    $cat = get_the_category();
    $cat = $cat[0];
}
return $cat->name;

こんなコードを書いてみると、親カテゴリ名を返す場合と、小カテゴリ名を返す場合がありました。
get_the_categoryって関数は、カテゴリの親子関係順に配列を返してくれるわけではないようです。

これでは困るので以下のように書き換え

// カテゴリ取得
$cat = get_the_category();
// 親カテゴリを取得
foreach ($cat as $val) {
    if ($val->category_parent == 0) {
        $cat_parent = $val;
        break;
    }
}
return $cat_parent->name;


もしこれを小カテゴリ対応するとしたら

// カテゴリ取得
$cat = get_the_category();
// 親カテゴリを取得
foreach ($cat as $val) {
    if ($val->category_parent == 0) {
        $cat_parent = $val;
    } else {
        $cat_sub = $val;
    }
}

みたいにすれば1つの親カテゴリ、1つの子カテゴリなら対応できますね。

複数カテゴリに対応するには変数を配列にする等していけば何とかなるんじゃないかな。
今回はそこまで求められてないのでどうでもいいけど。

0 件のコメント:

コメントを投稿