HOME  /WordPress関数
 /関数:WP_Query
2020年08月07日

関数:WP_Query

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

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

説明

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

下記の様なケースの時に利用します。

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

■カスタム投稿(商品やお知らせ等)を作成しその一覧を表示させる場合

 

使い方

使い方は下記の様な形式でループを記述します。

<?php
$args = array(
   /* ここに、どの様なリストを抽出するのか?を記述します */
 );
$my_query = new WP_Query( $args ); 
?>

<?php if($my_query->have_posts()):?>
  <?php while ($my_query->have_posts()):$my_query->the_post(); ?> 
     <!--サブループの中の処理-->
  <?php endwhile;?>
<?php endif ?>

<?php wp_reset_postdata();    /* 必ずQueryをリセットして下さい */
?> 

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

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

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

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

という流れになります。

 

どの様なリストを取ってくるのか?「$args」の指定方法

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

<?php
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$args = array(  /* Queryを抽出し並び替えるパラメータを指定する  */
   'order'                 => '××',
   'orderby'             => '××',
   'posts_per_page' => n,
   'post_type'          => '××',
   'category_name'  => '××',
   'tag'                    => '××',
   'post__not_in'      => array(get_the_ID()),
   'post__in'            => '××',
   'paged'                => $paged,   /* ページ番号を指定する変数を指定する */
);?>

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

order

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

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

 

orderby

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

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

 

posts_per_page

1ページに表示する個数を指定します。

総てを取り出す場合は-1

 

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

post_type

種類 説明
‘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()),

post__in

これは省くのではなく、Wp_Queryで表示させるIDリストを指定する方法です。

更にIDリストで指定した順で表示させたい場合は下記の様にします。

$ids = array(✖✖);
$args = array(
  	'posts_per_page'   	=>-1,
  	'post__in' 		        => $ids,
  	'orderby'				=>'post__in'
);
$products = new WP_Query( $args );

 

<どのページから表示するか?>

WP_Queryで抽出するのは表示する投稿リストです。

しかし表示するページにページネーションを設置した場合は「どのページ」から表示するのか?を指定する必要があります。

その時に指定するのが下記のパラメータです。

‘paged’ => $paged

しかしこの変数に、現在どのページを表示しているのか?を指定しないと、次の表示リストが抽出できません。

それを行うのが下記のプログラムになります。

$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;

上記の「get_query_var()」は現在のページを呼び出す関数ですが、これが設定されてない場合は1をセットして返します。

これにより、始めは1ページ目から、次は「posts_per_page」で表示した次のページからになります。

 

一般的な使い方

下記サンプルは

■投稿と同じカテゴリの投稿リストを取得

■現在の投稿は表示しない

■表示順番はid順

■1ページに10個表示し、ページ送りを可能にする

という表示リストを抽出します。

<?php $cat_slug = get_the_category()[0] -> slug; ?>
<? php $paged = ( get_query_var('page') ) ? get_query_var('page') : 1; ?>
<?php  $args = array(
    	'category_name'  => $cat_slug,
  		'post__not_in'      => array(get_the_ID()),
    	'orderby'              => 'id',
    	'posts_per_page'  => 10, 
        'paged' => $paged, );
?>
<?php $my_query = new WP_Query( $args );?>

 

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

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