1. ホーム
  2. WordPress
  3. WordPressでカテゴリIDを所得する時にはまった件

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の情報を引っぱってくる関数なので、ページリクエストが行われた後でないと使うことができません。そこだけはご注意を。

スポンサーリンク

コメント

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

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

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

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

    返信
  2. ひとり院長

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

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

    返信

コメントをどうぞ

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

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