WordPressでタームごと記事一覧を表示する方法

WordPressで特定のタクソノミーに属するタームの一覧を表示して、そのタームごとの記事の一覧を合わせて表示する方法の備忘録です。

タームの一覧を表示する

はじめに、特定のタクソノミーに属しているタームの一覧を表示します。

今回は例としてカスタムタクソノミー「area」に属するタームの一覧を表示します。

<?php
  $terms = get_terms('area', array('hide_empty' => false));
  if (!empty($terms) && !is_wp_error($terms)):
    foreach($terms as $term):
?>
  <h2><?php echo $term->name; ?></h2>
<?php
    endforeach;
  endif;
?>

get_terms()で表示したいタームのタクソノミー「area」を設定しています。配列で「’hide_empty’ => false」を設定して投稿のないタームも取得するように設定しています。投稿のないタームを取得しない場合は、「true」を設定します。

取得したタームをforeachのループで表示しています。echo $term->name;h2タグにタームの名称を表示しています。

タームごとの記事一覧を表示する

続いてforeachのループの中で、タイトルに表示したタームの記事一覧を表示します。

h2タグの下に記事を出力するコードを追加します。

<?php
  $terms = get_terms('area', array('hide_empty' => false));
  if (!empty($terms) && !is_wp_error($terms)):
    foreach($terms as $term):
?>
  <h2><?php echo $term->name; ?></h2>
  <?php
    $args = array(
      'post_type' => 'post',
      'tax_query' => array(
        array(
          'taxonomy' => 'area',
          'field' => 'slug',
          'terms' => $term->slug
        ),
      ),
    );

    $query = new WP_Query($args);
    if ($query->have_posts()):
  ?>
  <ul>
  <?php
    while ($query->have_posts()): $query->the_post();
  ?>
    <li><a href="<?php echo get_permalink(); ?>"><?php echo get_the_title(); ?></a></li>
    <?php
      endwhile;
      wp_reset_postdata();
    ?>
  </ul>
<?php
      endif;
    endforeach;
  endif;
?>

WP_Query($args)で記事の一覧を取得して、whileのループで表示しています。

配列で「’taxonomy’ => ‘area’」「’field’ => ‘slug’」「’terms’ => $term->slug」の3つを設定することで、「area」タクソノミーのタイトルに表示しているタームに属する記事を取得しています。

get_terms()WP_Query()ともに配列のパラメータで表示するタームや記事の一覧の選別や並び替えが可能です。

Share on Twitter
関連記事
WP-PageNaviでページネーションを作成する方法
WP-PageNaviでページネーションを作成する方法
WordPressでOGPとTwitterカードをプラグイン無しで設定する方法
WordPressでOGPとTwitterカードをプラグイン無しで設定する方法
WordPressで記事内に同じタグの記事一覧を表示する方法
WordPressで記事内に同じタグの記事一覧を表示する方法