HOME  /WordPress関数
 /関数:WP_Query
2020年02月25日

関数:WP_Query

WordPressの関数説明は、一般的な使い方だけです。

詳細はWordPress Codexを参照してください。

説明

WP_Queryは、メインループ以外のサブループを回したい時に使う関数です。

下記の様なケースがあります。

■投稿記事の下に、関連記事一覧を表示させる

■個別商品表示の下に、関連商品一覧を表示させる

 

使い方

使い方はメインループの下に、下記の様な形式で記述します。

<?php
$args = array(
  どの様なリストを取ってくるのか?を記述
);
$my_query = new WP_Query( $args ); ?>
<?php if($my_query->have_posts()):?>
  while ($my_query->have_posts()):$my_query->the_post(); ?> 
   サブループの中の処理
  <?php endwhile;?>
<?php endif ?>

<?php wp_reset_postdata(); ?>

■WP_Queryの引数に指定する変数($args)に「どの様なリストを取ってくるのか?を記述」します。

■WP_Queryを実行し変数($my_query)に入れます。

$my_queryを指定して、ループを回します。

■サブループの終了後、「wp_reset_postdata()」でQueryをリセットします。

という流れになります。

 

どの様なリストを取ってくるのか?の記述指定方法

良く使われるパラメータには下記の様な物がある。

<?php
$args = array(
 'order'                 => '××',
 'orderby'             => '××',
 'posts_per_page' => n,
 'post_type'          => '××',
 'category_name'  => '××',
 'tag'                    => '××',
 'post__not_in'      => array(get_the_ID()),
);?>

<表示に関連するパラメータ>

order

対象リストの並び順を指定します。

×× 説明
‘desc’ 降順 (default)
‘asc’ 昇順 

orderby

×× 説明  
   
‘date’ 作成日順 (default)
‘modified’ 更新日順
‘id’ 投稿ID順
‘title’ タイトル名順
‘rand’ ランダム

※上記は代表的な物です。その他の指定方法はWordPress Codexを参照してください。

posts_per_page

リストする個数。総てを取り出す場合は-1を指定する。

 

<どの様な物を取り出すか?>

post_type

xx 説明
‘post’ 投稿
‘page’ 固定ページ
‘any’ 投稿&固定ページ
×× カスタム投稿タイプ

※上記は代表的な物です。その他の指定方法はWordPress Codexを参照してください。

category_name

投稿のカテゴリ一覧のスラッグ名で指定します。

※現在の投稿のカテゴリを調べるのには「get_the_category()」を利用して下さい。

tag

投稿のタグ一覧のスラッグ名で指定します。

※現在の投稿のタグを調べるのには「get the tags()」を利用して下さい。

post__not_in

Wp_Query一覧から省きたい投稿IDを配列で指定します。

現在の投稿の下に表示する関連投稿リストからは現在の投稿は省きたいので下記の様に指定します。

post__not_in‘ => array(get_the_ID()),

一般的な使い方

下記サンプルは

■投稿にタグが設定されている場合は、同じタグを持っている投稿リストを取得

■投稿にタグが設定されてない場合は、同じカテゴリの投稿リストを取得

しています。

<?php $cat_slug = get_the_category()[0] -> slug; ?>
<?php $tag_slug = get_the_tags()[0]       -> slug; ?>
<?php if($tag_slug != ''):?>
	<?php
  	$args = array(
    	'tag'                  => $tag_slug,
  		'post__not_in'    => array(get_the_ID()),
    	'orderby'            => 'id',
    	'posts_per_page'=> 10,);
  	?>
<?php else : ?>
	<?php
 	  $args = array(
    	'category_name'  => $cat_slug,
  		'post__not_in'      => array(get_the_ID()),
    	'orderby'              => 'id',
    	'posts_per_page'  => 10,  );
   ?>
<?php endif; ?>
<?php $my_query = new WP_Query( $args );?>

 

このサイトで、この関数を使っている所

single.phpで投稿を表示した後ろに、関連ドキュメントリストを表示しています。