query_postsでカテゴリ指定する際に子カテゴリーも含めた結果を取得する方法

先日、query_posts関数を用いて「特定のカテゴリに属する投稿結果」を取得する処理を書いていました。

けれど、訳あって「特定のカテゴリに属する投稿結果(子カテゴリー含む)」を取得する必要が出てきました。

で、実装するに当たって「面倒な処理を書く必要があるんだろうな…」と思って調べてみたら、意外と簡単に出来たので、その方法をメモがてら紹介です。

スポンサーリンク
レクタングル(大)広告

query_postsで子カテゴリーを含めた結果を得る

それで、指定したカテゴリIDに所属する、子カテゴリーを含めたクエリ結果を返すquery_postsのサンプルコードはこちら。

$args = array(
  'posts_per_page' => 10, //取得する結果数
  'tax_query' => array(
    array(
      'taxonomy' => 'category',
      'terms' => array(111, 222, 333), //カテゴリーIDを指定する
      'include_children' => true,
      'field' => 'term_id',
      'operator' => 'IN'
      ),
    'relation' => 'AND'
  )
);
query_posts( $args ); //クエリの作成
if ( have_posts() ) : while ( have_posts() ) : the_post();
  echo '<p>コンテンツの内容を書く</p>';
endwhile;
else :
  echo '<p>Not Found</p>';//見つからない時のメッセージ
endif;
wp_reset_query();

通常の、カテゴリーのみを取得する引数はこんな感じになります。

$args = array(
  'posts_per_page' => 10, //取得する結果数
  'category__in' => array(111, 222, 333), //カテゴリーIDを指定する
);

それが今回、こんな感じにtax_queryを使うことで、ちょっと複雑になる感じです。

$args = array(
  'posts_per_page' => 10, //取得する結果数
  'tax_query' => array(
    array(
      'taxonomy' => 'category',
      'terms' => array(111, 222, 333), //カテゴリーIDを指定する
      'include_children' => true,
      'field' => 'term_id',
      'operator' => 'IN'
      ),
    'relation' => 'AND'
  )
);

ただ、内容を深く考えず利用できれば良い場合は、コピペで済むので、さして実装は難しくないかと思います。

参考 query_posts – WordPress私的マニュアル

まとめ

僕は当初、子カテゴリを含めたクエリ結果を得るには、get_term_children関数等を利用して、結構面倒な処理を書く必要があると思っていました。

けれど、上で紹介したようにquery_posts関数内で完結出来る書き方が出来るのは、「結構手軽」と感じました。

カテゴリ分けなどをしていると、子カテゴリー沢山あるけど、当該カテゴリには何一つ投稿が登録されていないなんて事も結構あります。

そういったケースでも、結果を取得したい場合には、重宝する書き方かと思います。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

フォローする

スポンサーリンク