この記事は最後に更新してから1年以上経過しています。

時代はWP_Queryなのか

説明

WordPressのテーマ作成において、メインの投稿記事とは別に特定の条件を指定した投稿内容を表示することが多々ある。つい最近まで get_posts関数を使用することが多かったのだが、最近はWP_Queryクラスを使用することが多くなってきた。
WP_Queryクラスはとても多機能であり、WordPressの投稿記事を検索・表示するための重要なクラスである。このWP_Queryクラスを使用した投稿記事の表示処理は、それほど特別なものではない。例えば'ニュース'というカテゴリーの最新投稿を5件取得する場合は、次のように記述する。
$apart_args = array(
	'order' => 'DESC',
	'posts_per_page' => 5,
	'category_name' => 'ニュース'
	);
$apart_posts = new WP_Query( $apart_args );
if ( $apart_posts->have_posts() ) :
	// ここに投稿記事を表示する前のの処理を記述
	while ( $apart_posts->have_posts() ) : $apart_posts->the_post();
	// ここに投稿記事の表示処理を記述
	endwhile;
	// ここに投稿記事を表示した後の処理を記述
	wp_reset_postdata();
else :
	// ここで投稿記事が見つからなかった場合の処理を記述
endif;
WP_Queryオブジェクトの生成時に指定するパラメータは、 query_posts関数とまったく同じである。生成されたWP_Queryオブジェクト(ここでは$apart_posts)には、検索結果の投稿記事データとそれを操作するためのメソッドが含まれている。投稿記事を表示するループ処理では、WP_Queryオブジェクトのhave_postsメソッド、the_postメソッドを使う(通常のループ処理のように have_posts関数や the_post関数は使用できない)。また後処理として、 wp_reset_postdata関数を呼び出すのも忘れずに行うこと。
上記の例は比較的単純な条件なのでget_posts関数でも実現可能だが、より詳細の条件を指定したい場合はget_posts関数では力不足になる。そんな時はこのWP_Queryクラスを使用する方法が適している。サイドバーやフッターなど、ページ中のパーツ要素として投稿記事を取得して表示する場合は、必要に応じてget_posts関数かWP_Queryクラスを使い分ければいい。WP_Queryクラスを使用する方法はそれなりにメモリーを消費しそうなので、サーバー環境を考慮して使い過ぎないように注意したほうがいいだろう。
余談になるが、query_posts関数の実行によってWP_Queryオブジェクトが生成され、グローバル変数$wp_queryに格納される。またhave_posts関数やthe_post関数は、$wp_queryの同名のメソッドを呼び出しているだけである。

最終更新 : 2011年08月01日 18:04


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。