web関連

【wordpress】子タームを持つ親タームに子タームを見出しで区切って出力する方法

親タームに紐づく子タームの記事を各子タームごとに出力したかったときのメモ

親タームページに各子タームに紐づく記事を出力

何がしたいかというと
【親タームページ】
<子ターム1見出し>
[子ターム1に紐づく記事][子ターム1に紐づく記事]…
<子ターム2見出し>
[子ターム2に紐づく記事][子ターム2に紐づく記事]…
<子ターム3見出し>

って感じ

<?php
$term_id = get_queried_object()->term_id;//親タームid取得
$taxonomy_name = 'タクソノミー名';
$termchildren = get_term_children( $term_id, $taxonomy_name );//親に紐づく子タームを取得
if($termchildren)://子ターム持ちの時 ?>

<?php
foreach ( $termchildren as $child ) ://子ターム出力?>
<?php $term = get_term_by( 'id', $child, $taxonomy_name );?>
<h2><?php echo $term->name; //子ターム名前出力 ?></h2>
<ul>
<?php //子タームに属する記事をリスト形式で出力する
  $paged = (int) get_query_var('paged');
  $args = array(
    'posts_per_page' => 10,
    'paged' => $paged,
    'post_type' => '投稿スラッグ',
    'tax_query' => array(
      array(
        'taxonomy' => $taxonomy_name,
        'terms' => array( $term->slug ),
        'field'=>'slug',
      )
    )
  );
  $the_query = new WP_Query($args);
  if ( $the_query->have_posts() ) :
  while ( $the_query->have_posts() ) : $the_query->the_post();
?>
	<li>
		<a href="<?php echo get_permalink(); ?>">
			<?php the_title(); ?>
		</a>
	</li>
<?php endwhile; ?>
<?php else: ?>
<?php endif; ?>
</ul>
<?php endforeach; ?>
<?php else://子ターム持っていない時 ?>
<?php endif; ?>

親タームと子タームの条件分岐

最初これで分けようと思ってたけどこれじゃダメってなったのでメモ

<?php
$taxonomy = $wp_query->get_queried_object();
?>
<?php if($taxonomy->parent == 0)://親の時 ?>

<?php else://子供の時 ?>

<?php endif; ?>

ターム周りは毎度迷うし、参考記事はコードごちゃごちゃしてて読み解くの面倒くさいからとりあえず備忘録

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。