WP_Queryのパラメータ

WP_Queryのパラメータ
Image by janrye from Pixabay

2020.11.20(更新日:2020.12.27)

現在のページで取得出来る投稿内容とは別のデータを使用したい場合に使うのがWP_Query。
SQLを扱わなくとも、何とか出来るのがステキなところ。
イレギュラーを除いて使うパターンはほぼ決まっているので、パターンで覚えておくのが楽。

この記事は1年以上経過しています。内容的に古い場合があります。

よく使うWP_Queryの記述パターン

前提としてカスタム投稿を使用し、投稿タイプは「blog」とする。
もしカスタム投稿ではなく、単なる投稿だったら「post」とすればOK。

投稿タイプで記事を取得したい場合

<?php
$args = array(
  'post_type' => 'blog', //投稿タイプ
  'orderby' => 'date', //日付で
  'order' => 'DESC', //降順で
  'post_status' => 'publish', //公開された投稿を
  'posts_per_page' => -1 //全部(数を決めたい場合は正の整数で)
);
?>
<!-- start loop -->
<?php $loop = new WP_Query( $args ); ?>
<?php if( $loop->have_posts() ) : ?>
<?php while( $loop->have_posts() ) : $loop->the_post(); ?>
<!-- loop内表示処理 -->
<?php endwhile; ?>
<?php wp_reset_postdata(); endif; ?>
<!-- end loop -->

うっかり忘れてしまう部分が以下

order DESC 最高から最低に降順(ex. 3, 2, 1)
ASC 最低から最高に昇順(ex. 1, 2, 3)

投稿タイプとタクソノミーでの絞り込みで記事を取得したい場合

前提としてカスタムタクソノミーを使用し、スラッグタイプは「blog_tax」とし、それに属するタームスラッグを「lunch」とする。

  • post_type => blog
  • taxonomy => blog_tax
  • term => lunch

単純に$argsの中身にタクソノミーの指定を追加するだけ。
もしカスタムタクソノミーではなく単なる投稿(post)だったら、ポストタイプを「post」タクソノミーを「category」としてターム部分を目的のスラッグに置き換えればOK。

$args = array(
  'post_type' => 'blog',
  'orderby' => 'date',
  'order' => 'DESC',
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'blog_tax', //タクソノミーのスラッグ
      'field' => 'slug',
      'terms' => 'lunch' //タームのスラッグ
    )
  )
);

大抵の場合は以上で足りると思われるが、さらに絞り込みたい場合は同じ様に条件に合わせたパラメータ追加指定する。
かなり多くのパラメータがあるので割愛するが、必要であれば以下参照。