h2ospace

[WordPress Tips] WP_Query:エントリーを取得する

2010-11-30 04:22:30

WordPressのテンプレートをカスタマイズする際、エントリーを取得するのに「query_posts」というファンクションを使いがちです。

しかし、このファンクションはリファレンスを見ると次のように記載されています。

query_posts 関数はメインの WordPress ループだけを変更するためのものです。新たなループを作るためのものではありません。
テンプレートタグ/query posts – WordPress Codex 日本語版

つまり、single.phpなどでエントリーを取得している途中で、「関連エントリー」などとして「query_posts」ファンクションを使って、ポストを取得してしまうと、メインのポストを壊してしまうのです。

そこで、二つ以上このようなクエリを走らせるためには「WP_Query」を利用します。


これは、PHPの「オブジェクト」を新しく作る方法で、次のように記述します。

$results = new WP_Query(array(
	'post_type'=>'page'	// ページを取得します
));

ファンクションのパラメータは、query_postsと同様です。そして、次のようにして新しいループを作ります。

<dl>
<?php
while ($results->have_posts()):
	$results->the_post();
?>
<dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dt>
<dd><?php the_content(); ?></dd>
<?php
endwhile;
?>
</dl>

これを見れば分かるとおり、ほとんど「query_posts」をそのまま「new WP_Query」に置き換えるだけで使うことができます。
ちょっと複雑なページを作りたいときは、覚えておくとよいでしょう。

※このエントリは ブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet Japan編集部の見解・意向を示すものではありません。
  • 新着記事
  • 特集
  • ブログ