改造する

Release | Updated |

【tax_query】カスタム投稿のカテゴリーごとに記事を取得する方法

この記事ではカスタム投稿のカテゴリー(タクソノミー)ごとに記事を取得する方法についてご紹介・解説・します。

なお、カスタム投稿の追加方法については、下記記事で詳しく解説しています。

カスタムタクソノミーのカテゴリーを取得するとは?

今回想定している取得イメージです。

カスタム投稿タイプの場合、WordPressのデフォルト機能としてある「投稿」とは違う取得の方法となります。

tax_queryというWordPressの関数を使用すると、カスタム投稿で自作したタクソノミー(カスタムタクソノミー)内から条件にあった記事だけを取得する事が可能です。

例えば、cat-shopというカスタムタクソノミーを作成し、カテゴリー分けとして「cat-flower」、「cat-furniture」、「cat-food」などと分けます。この場合、cat-floweだけを取得することができます。

今回紹介するコードの全体像

下記、phpファイル内に記述することで、カスタム投稿で作成したカテゴリーの中身(17行目にある「内容」)を表示することができます。

<?php
  $args = array(
    'post_type' => 'custom-post',
    'posts_per_page' => -1,
    'order' => 'DESC',
    'tax_query' => array(
      array(
        'taxonomy' => 'cat',
        'terms' => array('catX'),
        'field' => 'slug'
      ),
    ),
  );
$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ): while ( $the_query->have_posts() ): $the_query->the_post(); ?>
<div>内容</div>
<?php endwhile; endif; wp_reset_postdata(); ?>

以下で詳しく解説していきます。

カスタム投稿のカテゴリー取得方法の詳しい解説

カテゴリー取得までの大まかな流れ

下記がおおまかな流れの内容になります。
以降でさらに詳しく解説していきます!

<?php

  // 条件の指定
  $args = array(
    'post_type' => 'custom-post'
  );

  // クエリの定義
  $the_query = new WP_Query( $args );
?>

<!-- 投稿のループ -->
<?php if ( $the_query->have_posts() ): while ( $the_query->have_posts() ): $the_query->the_post(); ?>

<!-- ループする投稿の内容 -->
<div>内容</div>

<!-- ループの終了と投稿データのリセット -->
<?php endwhile; endif; wp_reset_postdata(); ?>

【流れ1】記事を取得するための条件指定

配列$argsに記事を取得するための条件を指定していきます。

$args = array(
  'post_type' => 'custom-post', // カスタム投稿タイプ名の指定
  'posts_per_page' => -1, // 投稿の取得数の指定
  'order' => 'DESC', // 投稿の表示順の指定
  'tax_query' => array(
    array(
      'taxonomy' => 'cat-name', // カスタムタクソノミー
      'terms' => array('cat-a'), // カスタムタクソノミーのカテゴリー(タクソノミーターム)
      'field' => 'slug'
    ),
  ),
);

【流れ2】クエリの定義「WP_Query」

WP_Queryクラスを呼び出してクエリ情報を入手し、$the_queryに情報を入ます。

$the_query = new WP_Query( $args );

【流れ3】取得内容をループさせ、取得内容を表示

取得した内容でwhile文でループさせます。

<?php if ( $the_query->have_posts() ): while ( $the_query->have_posts() ): $the_query->the_post(); ?>
<div>内容</div>

指定した投稿があったら、その投稿を繰り返すという記述です。

【流れ4】ループの終了と投稿データのリセット「wp_reset_postdata」

条件と繰り返しを終了させます。

<?php endwhile; endif; wp_reset_postdata(); ?>

メインループ(本来のループ)に影響を与えないよう、最後にサブループ(今回の取得した条件でのループ)で取得中の投稿情報をリセットするwp_reset_postdata() を必ず実行しましょう。

おまけ:もし記事があった場合にリスト形式で表示

下記のように記述することで、もし記事があった場合にリスト形式で表示させることが可能です。

<?php if ( $the_query->have_posts() ): ?>
  <ul>
    <?php while ( $the_query->have_posts() ): $the_query->the_post(); ?>
    <li>取得内容</li>
    <?php endwhile; ?>
  </ul>
<?php endif; wp_reset_postdata(); ?>

こちらの記事もいかかですか?

すべての記事一覧へ

  1. HOME
  2. 【tax_query】カスタム投稿のカテゴリーごとに記事を取得する方法