サポート » 使い方全般 » 親カテゴリの名前の付け方によって階層構造が上手く表示されない

  • カテゴリを親・子の二段階の階層構造で表示しようと思っています。
    ソースに記述しているコードは以下です。

    $cat = get_category(get_query_var('cat'));
    $id = $cat->category_parent ? $cat->category_parent : $cat->cat_ID;
    $children = wp_list_categories('echo=0&title_li=&child_of=' . $id);
    if( ! preg_match('/(カテゴリーなし|No categories)/', $children) ) {
    echo "<h2>";
    $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; };
    echo "</h2>";
    echo "<ul>";
    echo $children;
    echo "</ul>";

    管理画面で、例えば、

    フルーツ
     オレンジ
     ブドウ
     リンゴ

    とカテゴリの階層をつけると、実際にこれを表示したいページではこの通りに表示する事が出来ます。
    ところが、管理画面で

    果物
     オレンジ
     ブドウ
     リンゴ

    とカテゴリの階層をつけると、実際にページで表示されるのは

    リンゴ
     オレンジ
     ブドウ
     リンゴ

    となってしまいます。
    つまり、親カテゴリにつける名前の違いで表示に不具合が生じてしまいます。

    どうしてこのようなことが起きのか、どこに問題があるのか、教えてください。
    よろしくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは

    フルーツ
     オレンジ

    のフルーツの部分が

    echo "<h2>";
    $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; };
    echo "</h2>";

    この部分だとした場合ですが

    $cat = $cat[0];
    この部分では表示されている記事に設定されたカテゴリの一番最初のものを
    無条件に取得しています。(順序は特に指定がなければID順?)

    カテゴリが2階層以上に増えることがないのであれば
    提示されたコードの2行目
    $id = $cat->category_parent ? $cat->category_parent : $cat->cat_ID;
    で取得されている$idを6行目のget_the_categoryの引数に渡して
    $cat = get_the_category($id);
    という形にしてやれば希望通りになるかと思います。

    ※日本語のcodexの方は引数なしになっていましたので本家にリンクしてあります。

    トピック投稿者 bumsos

    (@bumsos)

    jdbbさん
    回答ありがとうございます。

    フルーツの部分が
    echo “<h2>”;
    $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; };
    echo “</h2>”;
    この部分だとした場合ですが

    言葉足らずで申し訳ありません。想像いただいた通りです。

    ご指摘のあった、6行目
    $cat = get_the_category();を
    $cat = get_the_category(id);に
    しました。

    しかし、状況を改善できず、h2タグ内が表示されなくなってしまいます。
    どうしたものでしょうか。

    すみません
    先ほど変更した部分の直後の
    $cat = $cat[0];
    は削除して下さい。

    トピック投稿者 bumsos

    (@bumsos)

    jdbbさん

    理解不足ですいません。
    $cat = $cat[0];
    を削除しましたが
    h2タグ内が表示されないままの状態です。

    現在このようになっています。

    $cat = get_category(get_query_var('cat'));
    $id = $cat->category_parent ? $cat->category_parent : $cat->cat_ID;
    $children = wp_list_categories('echo=0&title_li=&child_of=' . $id);
    if( ! preg_match('/(カテゴリーなし|No categories)/', $children) ) {
    echo "<h2>";
    $cat = get_the_category($id); { echo $cat->cat_name; };
    echo "</h2>";
    echo "<ul>";
    echo $children;
    echo "</ul>";

    よろしくお願いします。

    重ねてすみませんでした。
    get_the_categoryの引数に渡すidは記事idでした。
    ですので
    6行目の
    $cat = get_the_category($id);
    の部分を
    $cat = get_category($id);
    にしておいて下さい。

    トピック投稿者 bumsos

    (@bumsos)

    上記の通り修正したところ、望んでいた表示を実現する事が出来ました。
    何度もありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「親カテゴリの名前の付け方によって階層構造が上手く表示されない」には新たに返信することはできません。