WP_Queryでサブループを作成する例|パラメータの設定など【WordPress】

WordPressでサイトを作成していると、メインループとは違った条件のループ(サブループ)を作成したい場合があると思います。

今回は、そのような際に使用できるWP _Queryを使用してサブループを作成するソースコードの例と、WP _Queryの主なパラメータの紹介となります。

サブループを作成する際には、get_posts関数を使用する場合もあります。違いとしては、WP _Query使用する場合では、メソッド(have_posts、the_post、next_postなど)を使用し、投稿データを扱うことができます。その他、投稿を取得するパラメータが違う場合もあります。

get_posts関数については、以下を参考にしてみてください。

WP_Query を使用したサブループの例

下記ソースコードがWP _Queryを使用したサブループの例となり、サブループを出力したい箇所に記述します。

<ul>
<?php
// WP_Queryのパラメータを指定
$args = array(
	// 記事を3件表示
    'posts_per_page' => 3,
    // 記事をランダムで表示
    'orderby' => 'rand',
    // 記事の先頭固定表示なし
    'ignore_sticky_posts' => true
);
// WP_Queryのオブジェクト(インスタンス)を作成
$query = new WP_Query( $args );

// ループ開始
while ( $query->have_posts() ) :
	// カスタムクエリの投稿データをセット
	$query->the_post();
?>
    <li>
		<a href="<?php the_permalink(); ?>">
			<h2><?php the_title(); ?></h2>
			<?php the_content(); ?>
   		</a>
    </li>
<?php
endwhile;
// ループ終了

// メインクエリの投稿データに戻す
wp_reset_postdata(); 
?>
</ul>

ソースコードの説明

上記、サブループのポイントとなる箇所を以下に説明します。

WP_Query

WP_Queryは、パラメータで指定した投稿やページのデータを取得できるクラスとなります。

例では、コード3行目からの箇所で、サブループを作成するために、WP_Queryのインスタンスを作成し、サブループのクエリをパラメーターで指定しています。

指定したパラメータでは、投稿記事を3件表示し、表示順はランダムとしています。そして、デフォルトでは記事の先頭固定表示は使用する設定となっているので、使用しない設定としています。

the_post()

the_postメソッドは、ループ内にて次の投稿データを取得し、グローバル変数「$post」にセットします。それにより、投稿データを表示する関数(the_title、 the_contentなど )を使用して、投稿データを表示できます。

例では、コード18行目のthe_postメソッドにて、現在セットされているメインクエリのグローバル変数「$post 」を変更し、上記、WP_Query()のインスタンスのパラメーターで指定した、カスタムクエリの投稿データをセットします。

wp_reset_postdata()

wp_reset_postdata関数は、グローバル変数にセットされているカスタムクエリの投稿データを、メインクエリの投稿データに戻します。それにより、メインループで使用するメインクエリの投稿データを、テンプレートタグなどで、正しく利用することができます。

例では、コードの31行目でwp_reset_postdata関数を使用し、グローバル変数をメインクエリの投稿データに戻します。

WP _Queryの主なパラメータ

以下は、WP_Queryで指定できる主なパラメータの例となります。

表示・順序関連

表示・順序関連のパラメータの例です。

<?php 
$args = array(
	// 1ページに表示する記事の件数
    'posts_per_page'   => 5,
    // ソート順の対象。date、category、title、randなどで指定 
	'orderby'          => 'date',
    // ソート順。ASC(昇順)かDESC(降順)で指定
	'order'            => 'DESC'
);
$query = new WP_Query( $args ); 
?>

投稿関連

投稿関連のパラメータの例です。

<?php 
$args = array(
    // 指定したページのタイプを取得。post、pageなど
	'post_type'     => 'post',
    // 指定した投稿IDの投稿
    'p' 			=> 33, 
    // 指定した投稿スラッグの投稿
    'name'			=> 'hello-world', 
    // 配列で指定した投稿IDの投稿
    'post__in' 		=> array(1,2,3),
     // 除外する投稿の投稿IDを配列で指定
     // 注意 'post__in'と'post__not_in'を同じクエリで使うことはできない
    'post__not_in'  => array(1,2,3),        
);
$query = new WP_Query( $args ); 
?>

カテゴリー関連

カテゴリー関連のパラメータ例です。

<?php 
$args = array(
	// 指定したカテゴリーIDをもつ投稿。除外したいカテゴリーは、カテゴリーIDに - を付ける(複数の場合はカテゴリーIDを , で区切る)
	'cat'         		=> '5',
    //指定したカテゴリーIDのいずれかを持つ投稿
    'category__in' 		=> array( 2, 16 ),
    //指定したカテゴリーIDの全てを持つ投稿
    'category__and' 	=> array( 15, 22 ),
    //指定したカテゴリーIDを持つ投稿を除外
    'category__not_in'  => array( 8, 20 ),
    //指定したカテゴリースラッグのいずれかを持つ投稿
    'category_name' 	=> 'staff, news',
    //指定したカテゴリースラッグの全てを持つ投稿
    'category_name' 	=> 'web+book',
);
$query = new WP_Query( $args ); 
?>

タグ関連

タグ関連のパラメータの例です。

<?php 
$args = array(
	// 指定したタグIDをもつ投稿。
    'tag_id' 		=> 5,
    //指定したタグIDのいずれかを持つ投稿
    'tag__in' 		=> array( 2, 6 ),
    //指定したタグIDの全てを持つ投稿
    'tag__and' 		=> array( 15, 22 ),
    //指定したタグIDを持つ投稿を除外 
    'tag__not_in'   => array( 8, 20 ),
    //指定したタグスラッグのいずれかを持つ投稿
	'tag' 			=> 'bread, baking', 
    //指定したタグスラッグの全てを持つ投稿
	'tag' 			=> 'cooking+recipe', 
);
$query = new WP_Query( $args ); 
?>

カスタムフィールド関連

カスタムフィールド関連のパラメータの例です。

<?php 
$args = array(
	// 指定したカスタムフィールドのキー名を持つ投稿
	'meta_key'         => 'color',
    // 指定したカスタムフィールドの文字列の値を持つ投稿
	'meta_value'       => 'red',
    // 指定したカスタムフィールドの数値の値を持つ投稿
	'meta_value_num'   => '22',
    // meta_value の値に対する演算子。指定できる値は以下となります。
    // '='(デフォルト), '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP', 'RLIKE'
    'meta_compare'     => '=',     
);
$query = new WP_Query( $args ); 
?>

パラメータmeta_queryの例

その他のカスタムフィールド関連のパラメータとして、meta_queryがあります。meta_queryでは複雑な条件での指定が可能となります。

<?php 
$args = array(
	// カスタムフィールドの条件を配列で指定
	'meta_query' => array(
    	// 2つ以上の配列がある場合の論理的な関係。指定できる値は 'AND'か 'OR' 
		'relation' => 'AND',
		array(
       		// 指定したカスタムフィールドのキー名を持つ投稿
			'key'     => 'color',
            // 指定したカスタムフィールドの文字列の値を持つ投稿
			'value'   => 'blue',
            // meta_value の値に対する演算子。指定できる値は以下となります。
    		// '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP', 'RLIKE'
			'compare' => 'NOT LIKE',
		),
		array(
			'key'     => 'price',
			'value'   => array( 20, 100 ),
			'type'    => 'numeric',
			'compare' => 'BETWEEN',
		),
	),
);
$query = new WP_Query( $args ); 
?>

タクソノミー関連

タクソノミー関連のパラメータの例です。

<?php 
$args = array(
	// タクソノミーの条件を配列で指定
	'tax_query' => array(
    	// 2つ以上のタクソノミーを指定する場合の論理的な関係。指定できる値は 'AND'か 'OR' 
		'relation' => 'AND',
		array(
       	  	// 指定したタクソノミーを持つ投稿
			'taxonomy' => 'actor',
         	// パラメータtermsで使用する種類を指定。指定できる値は 'term_id'(デフォルト), 'name', 'slug'
			'field'    => 'term_id',
       	  	// 指定したタームを持つ投稿(パラメータfieldで指定した種類(ID、名前、スラッグ)で指定)
			'terms'    => array( 103, 115, 206 ),
         	// 階層構造を持もつタクソノミーの場合、子タクソノミーを含めるかを判断。含める場合はtrue(デフォルト)
            'include_children' => true,
         	// 演算子。指定できる値は 'IN', 'NOT IN', 'AND'
			'operator' => 'NOT IN',
		),
		array(
			'taxonomy' => 'movie_genre',
			'field'    => 'slug',
			'terms'    => array( 'action', 'comedy' ),
		),
	),
);
$query = new WP_Query( $args ); 
?>

固定ページ関連

固定ページ関連のパラメータの例です。

<?php 
$args = array(
    // 指定したページのタイプを取得。post、pageなど
	'post_type'        => 'page',
    // 指定した固定ページIDのページ
    'page_id' => 11, 
    // 指定した固定ページのスラッグのページ
    'pagename' => 'sample-page', 
    // 指定した子ページ(スラッシュで区切られた親ページと子ページのスラッグで指定)
    'pagename' => 'contact_us/canada', 
);
$query = new WP_Query( $args ); 
?>

今回、紹介した関数やパラメータなどの詳細は、以下の参考サイト・書籍を確認してみてください。

参考サイトなど

コメント投稿またはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。