サポート » テーマ » 子カテゴリーの条件分岐

  • 解決済 natsumi201

    (@natsumi201)


    いつもお世話になっております。
    カテゴリーについてご質問させてください。

    カスタム投稿に、該当するカテゴリーを表示する予定です。
    しかし、子カテゴリーの選択があれば子カテゴリーのみに。
    子カテゴリーの選択がなければ該当する親カテゴリーを表示する分岐の方法が分からず困っています。
    現在、子カテゴリーのみ表示になっていますが、ここからどのように分岐すればよいのでしょうか。
    ご教授いただけると幸いです。
    何卒、宜しくお願いいたします。

    <ul>
    <?php
    $terms = get_the_terms( $post ->ID, '〇〇-cat' );
    foreach( $terms as $term ) {
      if($term->parent){
        echo '<li>'.$term->name.'</li>';
      }
    }
    ?>
    </ul>
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは、このあとの条件分岐ではなくて、
    get_the_termsにわたす値を変更するのではないでしょうか?

    • この返信は5ヶ月、 3週前にsyntaroが編集しました。

    あ、なんとなくわかりました。最終的に出力したい、イメージをテキストなりで、あらわしていただけるとお返事しやすいかもしれません。

    https://zenn.dev/ryoheiobayashi/articles/tax-term-parent-wp

    こちらでしょうか?

    いま割り当てられているTermIDは、以下で取得できます。

            $term_id = (int) get_queried_object_id();

    このURLでの該当部分は、ループなかに以下の処理をいれてますね。

            $args = array(
                'taxonomy' => $taxonomy_name,
                'parent' => $termparent, 
            );
            $categories = get_categories($args);

    外部リンクへの誘導と、コピペとどっちかがルール違反になるかもしれないのですが。。

    イメージが、いまいちはっきりわからないので、まとはずれかもしれませんが。

    トピック投稿者 natsumi201

    (@natsumi201)

    お世話になっております!
    ご回答、ありがとうございます!
    また、分かりにくい質問をしてしまい、大変申し訳ありません。

    やりたいこととしましては、カスタム投稿ページのカテゴリー表示を、
    【子カテゴリーの選択がある場合には、子カテゴリーのみを表示し、選択がない場合には親カテゴリーを表示したい】
    になります。

    ※下記コードも試しましたが、子カテゴリーが重複して表示されてしまいました。

    <ul>
    <?php
    $terms = get_the_terms( $post->ID, '〇〇-cat' );
    
    if ( $terms && !is_wp_error( $terms ) ) {
        foreach( $terms as $term ) {
            // 子カテゴリーが選択されている場合は子カテゴリーのみ表示
            if ( $term->parent ) {
                echo '<li>' . $term->name . '</li>';
            }
        }
        // 子カテゴリーが選択されていない場合は親カテゴリーを表示
        if ( empty( $term->parent ) ) {
            foreach( $terms as $term ) {
                echo '<li>' . $term->name . '</li>';
            }
        }
    }
    ?>
    </ul>
    トピック投稿者 natsumi201

    (@natsumi201)

    解決しました。
    ありがとうございました。

    <?php
    $categories = get_the_terms(get_the_ID(), '〇〇-cat');
    if ($categories && !is_wp_error($categories)) {
    
    $parent_categories = array();
    $child_categories = array();
    
    foreach ($categories as $category) {
    if ($category->parent == 0) {
            $parent_categories[] = $category;
    } else {
            $child_categories[] = $category;
    }
    }
    // 子が存在する場合は子を表示
    if (!empty($child_categories)) {
    foreach ($child_categories as $child_category) {
            echo '<li>' . $child_category->name . '</li>';
    }
    } else {
    // 子が存在しない場合は親を表示
    if (!empty($parent_categories)) {
            foreach ($parent_categories as $parent_category) {
            echo '<li>' . $parent_category->name . '</li>';
            }
    }
    }
    }
    ?>
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。