カテゴリーの逆転現象?

2015 年 8 月 21 日

ホーム フォーラム 使い方全般 カテゴリーの逆転現象?

このトピックには2件の返信が含まれ、2人の参加者がいます。1 年、 9 ヶ月前 no23h さんが最後の更新を行いました。

3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • 投稿者
    投稿
  • #75480

    no23h
    参加者

    お世話になります。
    質問内容が正確に要点を捉えているのかわからないのですが、新規商品追加後、特定のカテゴリーを選択した商品だけカテゴリー階層が入れ替わるような現象が起きています。

    [現在のカテゴリー階層]
    商品
    -A
    –あ
    -B
    –い
    –う
    –え
    –お
    –か
    -C
    –き
    –く

    順番は以上の通りで、商品を新規追加する際はカテゴリー欄に「商品・A・あ」や「商品・B・う」など必ず3つずつチェックを入れます。

    その上で特定の部分に最下層のカテゴリー名を出力したいので、以下のコードを記述しています。
    <?php
    $category = get_the_category();
    $cat_name = $category[0]->cat_name;
    ?>
    <p><?php echo $cat_name; ?></p>

    例えば「商品・B・え」をチェックした商品は当然「え」が出力され、Cグループも同様に最下層のカテゴリー名が出力されるのですが、
    「商品・A・あ」をチェックした商品のみ「A」が出力されてしまいます。

    試しにphpの記述を、
    $category[1]->cat_name;
    に変更してみますと、
    「商品・B・え」を選択したものは「B」となり、
    「商品・A・あ」は「あ」が出力されます。

    これから推測すると、Aグループだけカテゴリーの階層が逆転しているように思えるのですが、
    考えられる原因はなんなのでしょうか。
    管理画面のカテゴリー設定をチェックしても、特に間違った箇所はみつかりません。
    一度カテゴリー削除して作り直したりも試しましたが、なぜかこの「Aとあ」の組み合わせのみ逆転します。

    原因がわかる方いらっしゃいましたらご回答お願い致します。

    #75484

    nanbu
    参加者

    こんにちは。

    それはWordPressの仕様です。
    get_the_category()を紐解いていきますと、この関数は、その記事に適用されているカテゴリーを配列にして取得するものですが、取得された配列はカテゴリー名によってソートされています。

    $defaults = array(‘orderby’ => ‘name’, ‘order’ => ‘ASC’, ‘fields’ => ‘all’);

    この仕様ですと、$category[0]に入るのは、A,B,Cのいずれかになるはずですが、「商品・A・あ」は「あ」が出力される所はデフォルトの動きと異なりますね。

    上記 orderby はフィルターで変更できますので、何らかの作用でID順になっているのではないでしょうか。

    結論を申し上げますと、get_the_category()で取得されるカテゴリーの並び順は、カテゴリーの階層構造とは全く関係が無いという事です。私の認識では、最下層のカテゴリを取得できる関数は無かったと思いますので、オリジナルの関数を作らなくてはいけないという事になります。

    #75490

    no23h
    参加者

    nanbuさま

    質問場所が間違えていたにもかかわらず、ご回答いただきありがとうございます。
    カテゴリー階層の仕組みがそのようになっていたとは知りませんでした。
    いろいろ参考サイトを探したのち、カテゴリー階層順に取得する関数を作成することが
    できましたので、なんとかこの問題は解決しました。
    ありがとうございました。

3件の投稿を表示中 - 1 - 3件目 (全3件中)

このトピックに返信するにはログインが必要です。