[WordPress] アーカイブページで親カテゴリのIDを取得する
親カテゴリを求める必要性
例えば、このカテゴリ内のページの場合は先頭にこの画像を表示させるといった処理が必要な場合(まさに今回そういった要求でした)に使えるTipsです。
なかなか手こずったのでメモとして残しておきます。
親カテゴリを求める場合の注意点
現在のページの親カテゴリを求める方法はネット上を探せばいろいろ出てきますが、注意しなければならないのは、表示させたい表示ブロックが何なのかということです。
投稿の詳細ページなのか、アーカイブページなのか、サイドナビなのか・・・によって表示のさせ方が異なります。
例えば、get_the_categoryやget_the_category_listなどを使ってまず現在のカテゴリを取得する方法。
これは、日本語版codexにもあるように「投稿に付けられた全てのカテゴリー」を配列で返します。
なので、アーカイブページなどで使用できません。厄介なのはアーカイブページで特段エラーになるわけではなく、普通に値を返してくるところです。
例えば、アーカイブ(一覧)ページにおいて表示されている詳細ページの属しているカテゴリが複数の親ページの場合・・・って意味がわかりにくいですね。
さかな
⇒さば
⇒いわし
⇒かつお
にく
⇒ぶた
⇒うし
⇒とり
といったカテゴリがあったとして、「さかな」と「にく」のカテゴリにチェックがあるページを含むアーカイブページを表示(たとえば「さかな」のアーカイブページ)させた場合、get_the_categoryでは、「にく」ページのIDを返してしまい、うまくIDが取得できない、という問題がありました。
「さかな」アーカイブページにいるのに、IDが「にく」で返ってくる不条理。
悲しくなります。
これは、一覧ページで記事が一つだけの場合でしたので複数ある場合どういう値で返ってくるかなどの検証はしていないので、詳細は不明です。
アーカイブページにおいて親ページIDを取得するには
まずやりたかったことが、「いわし」のアーカイブページにいようが「にく」のアーカイブページにいようが、親カテゴリのIDを取得することです。
いろいろ試したのですが、最終的にこれに落ち着きました。
1 2 |
$term=get_term(get_query_var('cat'),"category"); $parent_id=$term->parent; |
get_termは、IDを指定してカテゴリー・タグ情報を取得する関数です。引数としてまず現在のカテゴリIDをget_query_var(‘cat’)で自分のIDを取得しています。
2番めの引数としてcategoryを指定していますが、ここはタグやリンクなど用途にあわせて変える必要があります。
カテゴリ以外の一覧も表示する場合はこちらのページなど参考にされると良いかもしれません。
そして、$term->parentが、$term内に格納された親要素のカテゴリを取り出している箇所です。
この他にも、
$term->slug でスラッグ名や
$term->count で投稿数が取れたりします。
で、現在のページが親カテゴリ一覧の場合、$term->parentは0が返ってくるので、
1 2 3 |
if(!$parent_id): $parent_id=$term->term_id; endif; |
として、$parent_idの値がない場合は、$term->term_idを親IDとしなさい、とします。
あとは、$parent_idを元に、if文などで、画像の表示/非表示などの条件分岐をしてあげる、という流れになります。
まとめると、
1 2 3 4 5 6 7 8 9 |
$term=get_term(get_query_var('cat'),"category"); $parent_id=$term->parent; if(!$parent_id): $parent_id=$term->term_id; endif; if($parent_id=='1'): 〜親カテゴリのIDが1の場合の処理〜 endif; |
となります。