サポート » 使い方全般 » 投稿ページで「親カテゴリー>子カテゴリー」と表示したい

  • 解決済 kuroara

    (@kuroara)


    タイトルがわかり難くてすみません。

    投稿ページ(single.php)で、カテゴリー情報として、直前のカテゴリーと、その親のカテゴリーを表示したいと思っています。
    そのときに、複数のカテゴリーがあるときは、それぞれ別のリストとして表示したいです。

    【カテゴリーツリー】
    親A > 子A
    親B > 子B
       子C

    現在下記のようにしています。

    <ul>
    <?php
    $categories = get_the_category();
    foreach( $categories as $category ){
       $cat_id = $category->term_id;
       $cat_parent = $category->parent;
       $cat_child = get_term_children($cat_id, 'category');
       if( $cat_child != true ){
        echo  '<li>' . get_cat_name($cat_parent) . ':' . get_cat_name($cat_id) . '</li>';
       }
    }
    ?>
    </ul>

    これだと、下記のように表示されるのですが、

    【現在の表示】
    親A:子A
    親B:子B
    親B:子C

    【希望の表示】
    親A:子A
    親B:子B , 子C

    としたいです。

    親以上の祖先カテゴリーは表示したくないのですが、もしこれがネックになるようならば、後回しになっても構いません。
    色々調べたのですがどうしてもわからず、お知恵をお貸しください。

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

    親カテゴリでグループ化する処理を追加してみてはどうですか?

    echo しないで、一度配列に入れて、グループ化する例

    $categories	 = get_the_category();
    $list_array_key	 = array();
    $childs          = '';
    
    	foreach ( $categories as $category ) {
    		$cat_id		 = absint( $category->term_id );
    		$cat_parent	 = absint( $category->parent );
    		$cat_child	 = get_term_children( $cat_id, 'category' );
    
    		if ( $cat_child != true && 0 !== $cat_parent ) {
    			$list_array_keys[ $cat_parent ][] = $cat_id;
    		}
    		/*
    		  echo  '<li>' . get_cat_name($cat_parent) . ':' . get_cat_name($cat_id) . '</li>';
    		  } */
    	}
    
    	echo '<ul class="extend">';
    
    	foreach ( $list_array_keys as $key => $vals ) {
    
    		foreach ( $vals as $val ) {
    
    			$childs .= get_cat_name( $val ) . ' ';
    		}
    		echo '<li>' . get_cat_name( $key ) . ':' . $childs . '</li>';
    	}
    	echo '</ul>';

    ご提案いただきどうもありがとうございます!

    ですが、記載していただいた方法だと、次のグループにいっても子カテゴリを頭から出してしまうようです…

    親A:子A
    親B:子A, 子B , 子C

    となりました…

    ごめんなさい

    echo '<ul class="extend">';
    
    	foreach ( $list_array_keys as $key => $vals ) {
    		$childs = ''; // この一行追加でどうですか?
    		foreach ( $vals as $val ) {
    
    			$childs .= get_cat_name( $val ) . ' ';
    		}
    		echo '<li>' . get_cat_name( $key ) . ':' . $childs . '</li>';
    	}
    echo '</ul>';

    再度の投稿ありがとうございます!

    ばっちりです!!
    一人で頭を抱えていたのでほんと~~~に助かりました!!感謝感激です!

    思い通りに動くと楽しいものですが、配列がどうにも理解できず…自分でもコードが書けるようになりたいです…
    教えていただいたコードをよく眺めて勉強します。

    どうもありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「投稿ページで「親カテゴリー>子カテゴリー」と表示したい」には新たに返信することはできません。