[WordPress] WP_Queryで記事を全件取得する

前提:カスタム投稿タイプの定義

本記事では、カスタム投稿タイプ「ブログblogの記事を取得するものとして説明します。
カスタム投稿タイプはfunctions.php で定義します。

register_post_type( 'blog', [
  'label' => 'ブログ',
  'public' => true,
  'has_archive' => true,
]);

リファレンス(英語):
register_post_type() – Function

WP_Queryの基本の書き方

WP_Query を使って、公開中のブログ記事を全て取得するサンプルです。

$args = [
  'post_type' => 'blog',
  'post_status' => 'publish',
  'posts_per_page' => -1,
];
$query = new WP_Query($args);
if($query->have_posts()):
  while($query->have_posts()): $query->the_post();
    
    // get_the_ID();          //記事ID
    // get_the_title();       //記事タイトル
    // get_the_permalink();   //パーマリンク
    // get_the_date('Y.m.d'); //投稿日時
    // get_field('***');      //カスタムフィールド(ACF)
    // get_the_post_thumbnail_url();               //アイキャッチ画像
    // get_the_terms( $post->ID, 'タクソノミー名' ); //タクソノミー情報

  endwhile;
endif;
wp_reset_postdata();

リファレンス(英語):
WP_Query – Class

ページネーションがある場合

archive.php でページネーションのある一覧ページを作る場合、
posts_per_page に件数を、paged に現在のページ番号を指定します。

$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = [
  'post_type' => 'blog',
  'post_status' => 'publish',
  'posts_per_page' => 10,
  'paged' => $paged
];
$query = new WP_Query($args);
if($query->have_posts()):
  while($query->have_posts()): $query->the_post();

    // 略

  endwhile;
endif;
wp_reset_postdata();

取得時に並び替えを指定する場合

デフォルトは、投稿日時の新しい順で記事を取得します。
他の項目で並び替えたい場合は orderorderby を指定します。

$args = [
  'post_type' => 'blog',
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'order'  => 'DESC',  // ASC(1,2,3...) or DESC(3,2,1...)
  'orderby' => 'date', // title(タイトル) / modified(更新日時) / menu_order(管理画面上の表示順) etc...
];
$query = new WP_Query($args);
if($query->have_posts()):
  while($query->have_posts()): $query->the_post();

    // 略

  endwhile;
endif;
wp_reset_postdata();