WordPress整体院
主にwordpressのカスタマイズやトラブル対策
  1. ホーム
  2. > WordPress
  3. > WordPressでカテゴリIDを所得する時にはまった件
WordPress
4 2013.05.06.

WordPressでカテゴリIDを所得する時にはまった件

先日ある案件で現在のカテゴリIDと親カテゴリーのIDを所得する必要がありました。

色々としらべてみると、

WordPressでカテゴリID/カテゴリ名を取得する | OpenMediaLaboratory

というサイトにあるコードがドンピシャだったので、ありがたく使わせていただいたのですが…

どうもある条件が揃うと、正しくカテゴリーIDが所得できないケースがありました。

使わせていただいたコードは下記のようになります。

[html]
< ?php /* 現在のカテゴリ-の取得 */
$cat_now = get_the_category();
$cat_now = $cat_now[0];
/*親カテゴリーのID取得*/
$parent_id = $cat_now->category_parent;
/*現在のカテゴリーID/カテゴリー名取得*/
$now_id = $cat_now->cat_ID; /* カテゴリID */
$now_name = $cat_now->cat_name; /* カテゴリ名 */
?>
[/html]

何が問題だったかというと、$cat_now[0]の部分。

get_the_category()で所得される配列は、普通は一番最初が現在のカテゴリの情報になるはずです。だから、このコードも一番最初の配列である[0]を指定しているわけです。

ところが、

現在のカテゴリー(親カテゴリー有り)に含まれる記事で一番最後のものに親と子の両方のカテゴリーにチェックが入っている
+何らかの条件

が揃うとなぜか[0]のデータが親カテゴリー、[1]のデーターが現在のカテゴリーのデータになってしまいます。
親と子の両方にチェックが入っていても問題無いケースもあり、「何らかの条件」というのが結局わかりませんでした。

原因不明でも対策はする必要があるわけで、今回は配列の最初をとってくるという方法は諦めてget_queried_object()を使う方法にしました。

[html]
<?php /* 現在のカテゴリーページの情報を所得 */
$cat_now = get_queried_object();
$now_id = $cat_now -> cat_ID;/* カテゴリID */
$now_name = $cat_name;/* カテゴリ名 */
$parent_id = $cat_now -> parent;/* 親テゴリID */
?>
[/html]

処理速度やサーバーの負荷という面でどちらが有利なのかわかりませんが、こちらの方がより直接的にIDを所得できるかなと思います。

ただし、グローバル変数$wp_queryの情報を引っぱってくる関数なので、ページリクエストが行われた後でないと使うことができません。そこだけはご注意を。

スポンサーリンク
デジ部長 デジ部長 WordPress, カスタマイズ

コメント

  1. n_85
    2014年10月18日 12:30

    親カテゴリと子カテゴリ両方チェックをいれると、重複ページができてしまい、子カテゴリのみチェックいれてましたが、それだと親カテゴリのID取得、子カテゴリ名の取得が、get_the_category()ではできなかったため大変助かりました!!!!

    ありがとうございます!!!

    ちなみに、以下の点ですが、
    $now_name = cat_name;/* カテゴリ名 */

    cat_nameの$cat_nowが抜けてました!

    返信
  2. ひとり院長
    2014年11月16日 00:08

    >n_85さん
    ご指摘ありがとうございます!修正させていただきました。

    返信
  3. shehers
    2018年03月16日 13:12

    まさにこれで困ってました…むちゃくちゃ助かりました…ありがとうございました…

    返信
    • デジ部長
      2018年03月16日 21:53

      shehers さん
      お役に立ててよかったです!

      返信

コメントをどうぞ

返信をキャンセルする。

メールアドレスが公開されることはありません。

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

≪前の投稿
WordPressにRecommendations Barを追加
次の投稿≫
acmailerをエックスサーバーにインストールした時のメモ

プロフィール

HN:デジ部長
整体院とパーソナルトレーニングをやっていますが、WordPressをいじっていたらそちらの方が楽しくなり、知り合いのサイト作成やテーマ作りなどをボチボチとやっています。
このブログはそのときの覚え書きなどが主な目的でやってます。

カテゴリー

  • HTML/CSS
  • javascript
  • Mac
  • PHP
  • PPC広告
  • SEO
  • WordPress
  • カスタマイズ
  • サイト管理関係
  • テーマ開発
  • パソコン全般
  • プラグイン
  • 思った事

トップ
Copyright© 2019-2025 WordPress整体院 all right reserved