サポート » 使い方全般 » 親・子のカテゴリスラッグを取得したい

  • 解決済 mono0517

    (@mono0517)


    新着一覧にて親カテゴリー、子カテゴリーのスラッグを取得したいです。

    必ず親・子になるわけではなく、親のみの場合があります。
    子がある場合は親のスラッグも取得したいです。

    現在は…

    <?php
    while ( $the_query->have_posts() ) : $the_query->the_post();
    		$post_type = $post->post_type;
    		$cat = get_the_category();
    		$newsclass = ( ! empty($cat[0]) ) ? $cat[0]->category_nicename : '';
    ?>

    となっており、

    表示は

    <dt class="<?php echo $newsclass; ?>"><?php the_time('Y.m.d'); ?></dt>
    <dd class="<?php echo $newsclass; ?>"><a href="<?php the_permalink(); ?>"><?php the_title() ?></a></dd>

    で、
    dtに親のカテゴリスラッグ、
    ddに子カテゴリのスラッグを入れたいです。

    よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 必ず親・子になるわけではなく、親のみの場合があります。
    子がある場合は親のスラッグも取得したいです。

    カテゴリーがいくつ付くかバリエーションを明確にすると、方法を決めやすいです。
    どんなバリエーションがありますか?

    1. 親カテゴリー(parentがゼロ)が1つだけ付く
    2. 子カテゴリー(parentがゼロではない)が1つだけ付く
    3. 子カテゴリーAと親カテゴリーB(Aの親)が1つずつ付く
    4. 子カテゴリーAと親カテゴリーC(Aの親ではない)が1つずつ付く
    5. その他の組み合わせ(子が2個以上、親が2個以上など)

    返信ありがとうございます。
    すみません、説明下手ですが・・・

    親カテA
    親カテB
    ┣ 子カテA
    ┣ 子カテB
    ┣ 子カテC


    という普通の親子関係です。
    親Aには子はつきません。
    親Bには子がつきます(数が決まっていませんので1以上です)
    親Cというのがあとから増えるかもしれません。
    その際、親Cの子がいるかもしれませんので、触らずに増えてもいい場合がほしいです。
    親・子のスラッグが必要なのはclassにて、アイコンを変える必要があるからでして…。

    どうぞよろしくお願いします。

    問いかけ方が悪かったですね、ごめんなさい。
    「ひとつの投稿に付く可能性のあるカテゴリー」が何個でどんな種類なのかを教えてください。
    その例として1から5までを挙げたつもりでした。

    とりあえず、「投稿に2つ以上のカテゴリーが付くことはない」と仮定しますね。

    $cat = get_the_category();
    $cat = $cat[0];  // 2つ以上カテゴリーが付いていても1つだけ調べる(ランダムに1つ)
    if ( NULL == $cat ) {  // カテゴリーが1つも付いていない
      $parent_slug = '';  // 親カテゴリーのスラッグ
      $child_slug = '';  // 子カテゴリーのスラッグ
    } elseif ( 0 == $cat->parent) {  // 親カテゴリーが付いている
      $parent_slug = $cat->slug;
      $child_slug = '';
    } else {  // 子カテゴリーが付いている
      $child_slug = $cat->slug;
      $parent = get_category( $cat->parent );  // 親カテゴリーを取得
      $parent_slug = $parent->slug;
    }
    

    返事が遅くなってすみませんでした。
    ありがとうございます!

    おっしゃるように、投稿に2つのカテゴリーはつかないです。

    <dt class="親のスラッグ名">日付</dt>
    <dd class="子のスラッグ名">テキスト</dd>

    と、したいのですが、頂いたコードだと

    <dt class="<?php echo $parent_slug; ?>">日付</dt>
    <dd class="<?php echo $child_slug; ?>">テキスト</dd>

    になりますか?
    これだと、親カテゴリーは表示されますが、子カテゴリーが表示されませんでした…。

    これだと、親カテゴリーは表示されますが、子カテゴリーが表示されませんでした…。

    子カテA ひとつだけが付いた(親カテB は付けていない)投稿が、そうなりますか?

    子カテA と親カテB の両方が付いた投稿の場合は、うまくいきません。
    この場合に対応させるには、工夫したコードに変える必要があります。

    できました!
    子カテのみチェックなのですね。
    ありがとうございました!
    本当に助かりました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「親・子のカテゴリスラッグを取得したい」には新たに返信することはできません。