何を使っていか分からない方のために結論を書くと、query_postsは使わない。まずはWP_Queryを覚える。これで大丈夫。
query_posts
メインクエリを書き換えるため非推奨となっております。
メインループで使いたい場合は、pre_get_posts
を使います。
メインクエリを新たに上書きするため、wp_reset_query()
で元に戻すのを忘れると大変なことになります。
またデータベースを新たに読み込むため表示が遅くなります。
get_posts
サブループのため、メインループを書き換えません。
get_postsは配列として扱います。wp_reset_postdata()
でリセットします。
記述方法のサンプル
<?php
$args = array(
'paged' => $paged,
'posts_per_page' => 3,
);
$the_query = get_posts( $args );
?>
<?php global $post; ?>
<ul>
<?php foreach($the_query as $post) : setup_postdata( $post ); ?>
<!-- loop start -->
<?php get_template_part( 'loop' ); ?>
<!-- // loop end -->
<?php endforeach; ?>
</ul>
<?php wp_reset_postdata(); ?>
WP_Query
サブループのため、メインループを書き換えません。
WP_Queryはオブジェクトとして扱います。wp_reset_postdata()
でリセットします。
記述方法のサンプル
<?php
$args = array(
'paged' => $paged,
'posts_per_page' => 3,
);
$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) : ?>
<ul class="list">
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<!-- loop start -->
<?php get_template_part( 'loop' ); ?>
<!-- // loop end -->
<?php endwhile ; ?>
</ul>
<?php endif; wp_reset_postdata(); ?>
WP_Queryで指定できるパラメータについて
指定できるパラメータは多数あり、Codexを見るのが確実ですが、見やすくまとめているブログがありましたので2サイト紹介。
- これは便利!WordPressのWP_Queryでよく使うコードスニペット(それからデザイン)
- WordPressのget_postsとWP_Queryの違いと使用方法について(y.o.designers works)
get_postsとWP_Queryどっちがいいの?
WP_Queryはget_postsよりも多くの情報を持っており、複雑な処理をする事ができます。
そのため、クライアントワークでは後から仕様変更があっても修正しやすくするために、ほとんどの場合においてWP_Queryを使用します。