【WordPress】wp_list_categoriesを使わずに、タームの親子関係を保ったまま自由に階層表示させる方法 - 岡山のホームページ制作・Web制作会社|株式会社スイッチ

【WordPress】wp_list_categoriesを使わずに、タームの親子関係を保ったまま自由に階層表示させる方法

Switch Staff

おはようございます。スイッチの三宅です

ポケモンGOに、個体値を評価してくれる機能がつきましたね

さっそく愛しのレアコイルを見てもらったんですが、

「君のレアコイルは全体的にイマイチだな!」と罵られたので咽び泣いています。

それはともかく、題名にもあるように
「wp_list_categoriesを使わずに、タームの親子関係を保ったまま自由に階層表示させる方法」
に悩んでいたのが解決したので、メモ程度に書き込んでおきます。

さっそくコードを書くのでどうぞコピペしてください。コードが散らかってるのは許してください。

<dl>
<?php
$taxonomy = 'job'; //タクソノミー名
$args = array(
    'pad_counts' => true,
    'hide_empty' => true,
	'parent' => 0
);

$terms = get_terms( $taxonomy , $args );

foreach ( $terms as $term ) : //親タームのみ回す
?>
<dt><a href="<?php echo home_url( '/' ); ?>side/?staxonomy=job&sterm=<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></dt>
<?php
$term_id = $term->term_id;
$termchildren = get_term_children( $term_id, $taxonomy );

foreach ( $termchildren as $child ): //その中で子タームを回す
	$termC = get_term_by( 'id' , $child, $taxonomy );
	if( $termC->count != 0 ):?>
<dd><a href="<?php echo home_url( '/' ); ?>side/?staxonomy=job&sterm=<?php echo $termC->slug; ?>"><?php echo $termC->name; ?></a></dd>
<?php
endif;
endforeach;
endforeach;
?>
</dl>

何をしているかというと、まず親タームだけをforeachで回して、
その中で二重ループで、親に属する子タームを出しているだけです。

子タームは親タームのidをもとに呼び出されます。

ただしこれだと使ってないタームも全部出てきますので、

if( $termC->count != 0 ):

のところで記事数0のやつはださないようにしています。

終わってみるとこんなもんですが、調べてもなかなか出てこなかったので手こずりました。。
これならHTMLもかなり自由にカスタマイズできますね。

お役に立てれば光栄です。それでは、また。