WP_Queryとは
今回はWordPressのテンプレート作成のなかでも使用頻度の高いWP_Queryについて書いていきます。
まずWP_Queryについて、簡単に説明します。
通常、カテゴリーテンプレート(category.php)などの一覧ページや、記事テンプレート(single.php)において、投稿をループで表示させたいときは下記のように記述します。
<?php if(have_posts()): ?>
<?php while(have_posts()): the_post();?>
<!-- ここにループ内容 -->
<?php the_title(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
こうすると、カテゴリーページではカテゴリーに属する記事の一覧が、記事ページでは記事の中身が表示されます。
それぞれのテンプレートにおいてデフォルトで発行されるクエリは、WordPressのコアAPIで決められていますので、特別な指定をしなくても、そのテンプレートに適応した内容が出力されます。これをメインループといいます。
WP_Queryは、メインループではなく、独自でカスタマイズしたループを作成し出力する際に使用します。
これによって、出力順や出力件数を制御できたり、複数のポストタイプやカテゴリーに属する記事を出力できたり、メインループでは設定できない記事を取得することができます。
WP_Queryの記述方法
ここで、簡単なWP_Queryの例を見てみます。
<?php
$args = array(
'post_type' => array('news','event'),
'posts_per_page' => 25,
'orderby' => 'ASC'
);
?>
<?php $query = new WP_Query( $args ); ?>
<?php if($query -> have_posts()): ?>
<?php while($query -> have_posts()): $query->the_post();?>
<!-- ここにループ内容 -->
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); // クエリをリセット ?>
1〜7行目までが、出力する記事の設定(絞り込み)です。
上記の例では、
'post_type' => array('news','event'), // カスタム投稿タイプ「news」「news」の記事から
'posts_per_page' => 25, // 1ページの表示記事を25件にする
'order' => 'ASC' // 表示順序を昇順にする
という指定(絞り込み)をあらかじめしています。
あとはループ内でタイトルやコンテンツを出力します。
ここはメインループと同じですね。
パラメータ
設定できるパラメータをすべて挙げると膨大な量になってしまいますので、個人的によく使うものを下記にまとめました。
<?php
'name' => 'POST_TITLE', // 投稿のスラッグ
'page_id' => 1, // 固定ページのID
'p' => 1, // 投稿のID
'post_parent' => 1, // 指定した親ページに含まれる
'post__in' => array(1,2,3), // 指定した投稿IDが含まれる
'post__not_in' => array(1,2,3), // 指定した投稿IDを除外する
'post_type' => array( // 投稿タイプ デフォルトの値は'post'
'post', // → 投稿
'page', // → 固定ページ
'NEWS' // → カスタム投稿タイプ (例:news)
),
'posts_per_page' => 10, // 1ページあたりに表示する投稿数。'-1'で全件表示
'paged' => get_query_var('page'), // ページ送りを有効にする
'order' => 'DESC', // 昇順・降順
'orderby' => 'rand', // 何を基準に順序を決めるか。この他 'date'(日付)、'title'(タイトル)など多数
'category_name' => 'CATEGORY_NAME', // タグのID
'cat' => 1, // タグのスラッグ
'tag' => 'TAG_NAME', // タグのスラッグ
'tag_id' => 1, // タグのID
'meta_key' => 'KEY', // カスタムフィールドのキー
'meta_value' => 'VALUE' // カスタムフィールドの値
パラメータについての日本語ドキュメントはこちらにもありますので、一度目を通してみるとおもしろいです。
さいごに
以上がWP_Queryの使い方になります。
WordPressでオリジナルのテーマ作成を行っていると、どうしても使う機会が増えてきます。
パラメータの組み合わせや、出力方法次第でいろいろなことができるのでひマスターしたいですね。