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