Wordpress Tips

2016.05.27

WP_Queryの使い方

カテゴリー:

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でオリジナルのテーマ作成を行っていると、どうしても使う機会が増えてきます。
パラメータの組み合わせや、出力方法次第でいろいろなことができるのでひマスターしたいですね。

ご相談・ご依頼に関して、まずは

ください。お気軽にどうぞ