y.o.designers-works

WordPressのget_postsとWP_Queryの違いと使用方法について

wordpressのget_postsとWP_Queryの違いとそれぞれの特徴についてですが2つに大きな違いはありません。
違いがあるとすれば取得できる情報量の違いになります。

get_posts

  • ・テンプレートタグ
  • ・カスタムループを生成する際に使用(メインループに影響与えない)

記述例

<ul>
<?php

$args = array( 'post_type' => 'post', 'posts_per_page' => 5 );

$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
	<li>
		<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
	</li>
<?php endforeach; 
wp_reset_postdata();?>

</ul>
  

get_postsを使用してカスタムループを作成した際は「wp_reset_postdata();」でグローバル変数を復元しましょう

get_postsのデフォルトについて

<?php
$args = array(
	'posts_per_page'   => 5,
	'offset'           => 0,
	'category'         => '',
	'category_name'    => '',
	'orderby'          => 'date',
	'order'            => 'DESC',
	'include'          => '',
	'exclude'          => '',
	'meta_key'         => '',
	'meta_value'       => '',
	'post_type'        => 'post',
	'post_mime_type'   => '',
	'post_parent'      => '',
	'author'	   => '',
	'post_status'      => 'publish',
	'suppress_filters' => true 
);
$posts_array = get_posts( $args ); 
?>
    

WP_Query

  • ・クラス
  • ・カスタムループを生成する際に使用(メインループに影響与えない)

記述例


<?php
$args = array( 'post_type' => '$my_post');
?>
<?php
// the query
$the_query = new WP_Query( $args ); ?>

<?php if ( $the_query->have_posts() ) : ?>
    
    <!-- the loop -->
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    //ループさせたい内容を記述

    <?php endwhile; ?>
    <!-- end of the loop -->  
  </ul>
</div>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p>
  <?php _e( '記事がありません' ); ?>
</p>
<?php endif; ?>

  

WP_Queryを使用してカスタムループを作成した際は「wp_reset_postdata();」でグローバル変数を復元しましょう

WP_Queryのパラメーター一覧

投稿&固定ページ関連

パラメーター 概要
p 10 投稿の記事ID
name ‘hello world’ 投稿の記事スラッグ
page_id 7 固定ページID
pagename ‘sample-page’ 固定ページのスラッグ。子ページを指定するには「/」を使用
post_parent 1 親ページID
post_parent__in array(1,2,3) 複数の親ページID
post_parent__not_in array(1,2,3) 属さない複数の親ページID
post__ array(1,2,3) 取得する投稿ID
post__not_in array(1,2,3) 省く複数の投稿ID

投稿タイプ&ステータス関連

パラメーター 概要
post_type array(‘post’,’page’,’custom-post-type’) 投稿タイプ
post_type ‘any’ 全ての投稿タイプ
post_status array(
‘publish’,
‘pending’,
‘draft’,
‘auto-draft’,
‘future’,
‘private’,
‘inherit’,
‘trash’
)
publish:公開
pending:レビュー待ち
draft:下書き
auto-draft:自動保存
future:予定公開設定された投稿
private:非公開
inherit:保存されたリビジョン
trash:ゴミ箱の投稿
post_status ‘any’ 全てのステータス

カテゴリー関連

パラメーター 概要
cat 2 カテゴリーID。’1,2,3’のように複数のIDが指定可能
category_name ‘wordpress’ カテゴリーのスラッグ’wordpress,php’のように複数指定可能
category__and array(1,2) 複数のカテゴリーに属する記事を絞り込む
category__in array(1,2) 複数のカテゴリーのいずれかに属する記事を絞り込む
categroy__not_in array(1,2) 指定したカテゴリーに属さない記事を絞り込む

タグ関連

パラメーター 概要
tag ‘wordpress’ タグのスラッグ
tag_id 4 タグID
tag__and array(1,2) 複数のタグに属する記事を絞り込む
tag__in array(1,2) 複数のタグのいずれかに属する記事を絞り込む
tag__not_in array(1,2) 指定したタグに属さない記事を絞り込む
tag_slug__and array(‘wordpress’,’php’) 複数のタグに属する記事を絞り込む
tag_slug__in array(‘wordpress’,’php’) 複数のタグのいずれかに属する記事を絞り込む

カスタムフィールド関連

パラメーター 概要
meta_key ‘key’ カスタムフィールドのキー
meta_value ‘value’ カスタムフィールドの値
meta_value_nam 18 カスタムフィールドの値(数字)
meta_compare ‘=’ ‘meta_value’をどう比較するか。
使用可能な値は’!=’、’>’、’>=’、'<‘、’=’
meta_query array(
‘relation’ => ‘AND’,
array(
‘key’ => ‘color’,
‘value’ => ‘red’,
‘type’ => ‘CHAR’,
‘compare’ => ‘=’
),
array(
‘key’ => ‘price’,
‘value’ => array(1,500),
‘compare’ => ‘NOT LIKE’),
)
カスタムフィールドのパラメーター
relation:’AND’または’OR’を指定
key:カスタムフィールドのキー
value:カスタムフィールドの値
type:カスタムフィールドタイプ。
使える値は
‘NUMERIC’(数値)、
‘BINARY’(バイナリ)、
‘CHAR’(文字列)、
‘DATE’(日付)、
‘DECIMAL’(少数)、
‘SIGNED’(符号付き整数)、
‘TIME’(時間)、
‘UNSIGNED’(符号なし整数)。
デフォルトは’CHAR’
compare:比較する演算子。
使える値は
‘='(値と一致する)、
‘!='(値と一致しない)、
‘>'(値より大きい)、
‘>='(値以上)、
‘<‘( 値より小さい)、
‘<='(値以下)、
‘LIKE'(値で指定した文字列に一致する)、
‘NOT LIKE(値で指定した文字列に一致しない)’、
‘IN’、(値(配列)で指定した何れかに一致する)
‘NOT IN'(値(配列)で指定した何れにも一致しない)、
‘BETWEEN'(2つの値で指定した範囲内(境界を含む))、
‘NOT BETWEEN'(2つの値で指定した範囲外)、
‘EXISTS'(要素が入っている)、
‘NOT EXISTS'(要素が入っていない)。
デフォルトは’=’

タクソノミー関連

パラメーター 概要
tax_query array(
‘relation’ => ‘AND’,
array(
‘taxnomy’ => ‘wordpress’,
‘field’ => ‘slug’,
‘terms’ => array(‘plugin’,’custom’),
‘include_children’ => true,
‘operator’ => ‘IN’
)
タクソノミーに関連する条件。
‘relation’の指定に従って配列で指定。
(複数指定が可能)
relation:’OR’または’AND’のいずれかを指定。
初期値は’AND’
taxonomy:’category’などのタクソノミー名
terms:タクソノミーの値(配列で指定)
field:’term_id’、’slug’などのフィールド名
include_children:階層構造をもった
タクソノミーの場合に、
子タクソノミー項を含めるか
(初期値はtrue)
operator:’AND’、’IN’、’NOT’のいずれか

投稿者関連

パラメーター 概要
author 1,2,3 ユーザーID(数値)。
マイナス指定すると、特定のユーザーを省く
author_name ‘okayama’ ニックネーム
author__in array(1,2) 表示するユーザーのID
author__not_in array(1,2) 省くユーザーのID

パスワード関連

パラメーター 概要
has_password true trueはパスワード付きの投稿に絞り込む。
falseはパスワード無
post_password ‘password’ 特定のパスワードがついた投稿

ページ送り関連

パラメーター 概要
posts_per_page 10 1ページに表示する投稿数
posts_per_archive_page 10 アーカイブページで1ページに表示する投稿数
nopaging false 全ての投稿を表示する場合はtrue。
falseのときはページ送りを使用(初期値はfalse)
paged get_query_var(‘page’) ページ送りのときのページ番号。
ページ送りを有効にするには
get_query_var(‘page’)を指定
ofset 5 ずらして省く投稿数
ignore_sticky_posts false 先頭固定の投稿を無視するかどうか(初期値はfalse)

並び替え関連

パラメーター 概要
order ‘DESC’ ‘ASC’で昇順、’DESC’で降順(初期値は’DESC’)
orderby ‘date’ どのパラメーターでソートするか(初期値は’date’)
‘none’:並び替えない
‘ID’:記事IDでソート
‘author’:投稿者でソート
‘title’タイトルでソート
‘name’:ユーザー名でソート
‘date’:日付でソート
‘modified’:更新日でソート
‘parent’親ページのIDでソート
‘rand’:ランダムでソート
‘comment_count’:コメント数でソート
‘menu_order’:ページの表示でソート
‘meta_value’:カスタムフィールドの値を文字列としてソート
‘meta_value_num’:カスタムフィールドの値を数値としてソート
‘post_in’配列で指定された記事IDの並び順を維持

並び替え関連

パラメーター 概要
year 2014 4桁の年
monthnum 10 月(1~12)
w 1 年内の週(0~53)
day 18 月内の日(1~31)
day 18 月内の日(1~31)
hour 15 時間(0~23)
minute 24 分(0~59)
second 15 秒(0~59)
m 198310 4桁の年と月
date_query array(
array(
‘year’ => 2016
‘month’ => 4
‘week’ => 31
‘day’ => 5
‘hour’ => 2
‘minute’ => 50
‘second’ => 18
‘after’ => ‘January 1st, 2015’,
‘before’ => array(
‘year’ => 2015,
‘month’ => 2,
‘day’ => 28,
),
‘inclusive’ => true,
‘compare’ => ‘=’,
‘column’ => ‘post_date’,
‘relation’ => ‘AND’,
)
)
日付をパラメーターで指定
after:strtotime()と互換性のある文字列、
または’year’、’month’、’day’の配列。
before:指定した日付以前の投稿を取得。
strtotime()と互換性のある文字列、
または’year’、’month’、’day’の配列。
inclusive:afterまたはbeforeパラメーターで
指定された値を含むかどうか。
compare:どう比較するか。使える値は
‘=’、
‘!=’、
‘>’、
‘>=’、
‘<‘、
‘<='、
‘LIKE’、
‘NOT LIKE’、
‘IN’、
‘NOT IN’、
‘BETWEEN’、
‘NOT BETWEEN’、
‘EXISTS’、
‘NOT EXISTS’。
column:紹介するカラム
relation:どう比較するか。
‘OR’または’AND’で指定。

参考:関数リファレンス/WP Query

get_postsとWP_Queryの違いについて

単純に投稿のデータを取得するだけなら違いは無いです。
get_postsは関数内でWP_Queryを使用していて、指定できるパラメーターーもWP_Queryと同じです。

取得できる情報量が違う

get_postsはWP PostのWP_Post のメンバー変数の値を取得できます。
WP_Postのメンバー変数には記事に関する情報しかありません。
それに加え、WP_Queryはis_pageなど、ページに関する情報を持っています。

まとめ

get_postsと比べWP_Queryのほうがより複雑な処理を行うことができるということになります。

参考にさせて頂いたサイト

スポンサーリンク

他にオススメな記事