[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();
取得時に並び替えを指定する場合
デフォルトは、投稿日時の新しい順で記事を取得します。
他の項目で並び替えたい場合は order
と orderby
を指定します。
$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();