🤔
【WordPress】WP_Queryを理解する
はじめに
雰囲気で使ってきたWP_Queryを整理し、理解するための記事です。
WP_Queryとは
WP_Query は wp-includes/class-wp-query.php に定義されているクラスで、WordPress ブログへの複雑な投稿やページのリクエストを取り扱います。 wp-blog-header.php (バージョン 2.0 では WP クラス) が
$wp_query
オブジェクトに現在のリクエストを定義する情報を与えることで、$wp_query
はどのタイプのクエリを扱っているのか (カテゴリーアーカイブ、年月別アーカイブ、フィード、検索など) を確定し、要求された投稿を取り出します。$wp_query
はリクエスト上の情報を多く保持していて、後からでも利用することができます。
要するに...
- 定義済みのクラス
- wp-blog-header.php が
$wp_query
オブジェクトにリクエスト情報を与え、要求された投稿を取り出す
といったところでしょうか?
WP_Queryにリクエスト情報を与えることで、通常のクエリと異なる情報を取り出せます。
使用ケース
通常のテンプレート構成で取得されるクエリではなく、条件分岐や別途ループを作成、出力したい場合に使用します。
例:
- 固定ページ内に記事一覧を表示する
- 投稿ページに関連記事を表示する
基本形
<?php
// クエリを指定
$the_query = new WP_Query( $args );
// ループ処理
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
/* メインクエリの$postグローバル変数をリセット */
wp_reset_postdata();
} else {
// 投稿が取得できない場合の処理
}
よくやる使い方
カスタム投稿の一覧を取得
個人的によくあるのは、カスタム投稿を一覧取得するケースですね。
// クエリを指定
<?php
//取得する投稿のパラメーターを配列で指定
$args = array(
'post_type' => 'hogehoge', //カスタム投稿タイプを指定
'posts_per_page' => 10,
);
$the_query = new WP_Query($args);
?>
// ループ処理
<?php
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<li class="loop-item">
<p><?php the_field('カスタムフィールドID'); ?></p>
</li>
<?php
endwhile;
endif;
?>
// メインクエリの$postグローバル変数をリセット
<?php wp_reset_postdata(); ?>
最後に
パラメーター取得の部分は、公式ドキュメントを見ていただくと確認できると思います。
個人的には配列指定のところを雰囲気でやってたので、ドキュメントを確認することで何をやってるかが理解できました。
参考記事
Discussion