サポート » 使い方全般 » どのカテゴリからでも同じカテゴリ名が表示される

  • 解決済 nobuzoh

    (@nobuzoh)


    カテゴリ名:A
    スラッグ:cat_a
    親カテゴリ:なし
    テンプレートファイル名:category-cat_a.php

    カテゴリ名:B
    スラッグ:cat_b
    親カテゴリ:A
    テンプレートファイル名:category-cat_b.php

    カテゴリ名:C
    スラッグ:cat_c
    親カテゴリ:A
    テンプレートファイル名:category-cat_c.php

    カテゴリ名:D
    スラッグ:cat_d
    親カテゴリ:C
    テンプレートファイル名:category-cat_d.php

    という4つのカテゴリがあります。
    各テンプレートファイル内に、

    <?php
    $cat = get_the_category();
    $cat = $cat[0];
    echo $cat->cat_name;
    ?>

    と記述し、表示してみると、
    全て B と表示されてしまいました。
    (category-cat_a.phpでは A
     category-cat_b.phpでは B
     category-cat_c.phpでは C
     category-cat_c.phpでは D
     と表示する予定でした)

    echo single_cat_title('', false);

    と書けば予定通りのカテゴリ名が表示されたのですが、
    カテゴリ名以外にも説明も表示したいので、
    get_the_categoryを使いたいのと、
    変な表示(だと思っている)を放置したくないので、
    どうして予定通りの表示にならないのかを知りたいです。

    ちなみに、$catをvar_dumpで見てみると以下の部分が異なっているのみでした。
    object(stdClass)#77 (16) ・・同略・・[“object_id”]=> string(3) “345”・・同略・・
    object(stdClass)#77 (16) ・・同略・・[“object_id”]=> string(3) “345”・・同略・・
    object(stdClass)#121 (16)・・同略・・ [“object_id”]=> string(2) “71”・・同略・・
    object(stdClass)#121 (16)・・同略・・ [“object_id”]=> string(2) “71”・・同略・・

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • スレッド開始 nobuzoh

    (@nobuzoh)

    あれからちょっと変化がありました。

    カテゴリはA~Dとある中、
    投稿Xは始め、Bだけをカテゴリとしていました。
    その後、Dも投稿Xのカテゴリとしました。
    この状態で前投稿のような現象が置きました。

    ここで、試しに投稿Yを追加し、そのカテゴリをCとすると、
    category-cat_c.phpを表示させた時に C と表示されました。
    ただ、今度はcategory-cat_a.phpでも C と表示されるようになりました。

    思う通りにならないのはカテゴリの考え方、投稿の仕方に問題があるのかな?と思います。

    ・カテゴリA「動物」
        ・カテゴリB「すべての動物」
            →投稿X「ネズミ」
        ・カテゴリC「脊椎動物」
            ・カテゴリD「哺乳類」
                →投稿X「ネズミ」
    というイメージでカテゴリの分け方、投稿の仕方等問題はないように見えるのですが・・・

    さらに調べてみると、
    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_the_category
    にあるget_the_categoryの説明では、cat_nameは「記事のカテゴリ名」とあります。
    記事のカテゴリ名ということは投稿Xのカテゴリ名の事になるのだと思うので、
    少なくともcategory-cat_b.phpではB、category-cat_d.phpではDと表示されるはず、
    と思ったのですが、投稿Xのパーマリンクを見ると、
    http://localhost/wordpress/cat-a/cat-b/X/
    となっているので、これが基準となるのであれば、A~Dのcat_nameがBとなるのはうなずけます。
    だから他の個人ブログのget_the_categoryの説明によく書いてある、
    「現在のページのカテゴリー名」という表現に語弊があるのかな?と思いました。

    で、結局のところ今だ解決には至っていないのですが、
    ここまでの認識に間違いがないのか?
    うまく表示できるテンプレートタグはないのか?
    各カテゴリでファイルを分けてるんだからおとなしくオンコーディングで書き分けるのが良いのか?

    以上の3点をご教授願います。

    ※スラッグのアンダーバーが適切ではないかもという懸念からハイフンに変更しました。
     なので文章も途中からハイフンに変わっています。

    モデレーター jim912

    (@jim912)

    get_the_category は、CODEXにあるように、記事のカテゴリーを全て取得してきます。全てというのは、投稿XがB,Dに属している場合、B,D両方をカテゴリーのID順に取得してきます。
    テンプレートに記述した

    $cat = $cat[0];

    は複数取得したうちの最初のカテゴリーを採用するよという処理です。
    このため、カテゴリーによらずBだけが表示されたりするわけです。
    カテゴリーを1つしか選択しないのであれば、問題とはなりませんが、複数を選択するような場合は、必ずついてまわる問題となります。

    ちなみに、ループの前で get_the_category を使えばループの最初で表示する記事のカテゴリーを、ループの後で使えばループの最後で表示する記事のカテゴリーを取得するので、記述位置や、記事の更新、ページ送りなどによって表示が変わってしまうことになります。

    正しくカテゴリー名や説明を表示するには、single_cat_title、category_description を利用してください。

    スレッド開始 nobuzoh

    (@nobuzoh)

    jim912さん

    理解が深まるとともにcategory_descriptionで問題も解決しました。
    大変ありがとうございました。

    #問題ではないのですが、
    #echo category_descriptionしてみると、
    #記事がp要素で囲われて表示されるんですね。
    #p要素にスタイル当ててたので予期せぬ表示に一瞬戸惑いました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「どのカテゴリからでも同じカテゴリ名が表示される」には新たに返信することはできません。