カスタムループについて

カスタムループについて  query_posts / get_posts / WP_Query

何を使っていか分からない方のために結論を書くと、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サイト紹介。

get_postsとWP_Queryどっちがいいの?

WP_Queryはget_postsよりも多くの情報を持っており、複雑な処理をする事ができます。
そのため、クライアントワークでは後から仕様変更があっても修正しやすくするために、ほとんどの場合においてWP_Queryを使用します。

Codex