WordPressのループの作成方法まとめ!

最終更新:2017-05-17 by Joe

WP_Query, query_posts() get_posts()、なんか色々あるけどどう違うの?どれを使えばいいの?というよくある疑問です。

どれを使えばいいの?

get_posets()か、WP_Queryからnewして下さい。query_posts()はテーマ開発者など、よその人使うために用意された関数ではないです。query_posts()絶対に使わないで下さい。

get_posts()のケース

投稿のフィールドへのアクセス方法が幾つかあります、どれでも好きなやり方をして下さい。

$my_posts = get_posts( $arg );

foreach ( $my_posts as $p ) {

  // 1) プレーンで表示
  echo $p->post_content;

 // 2) the_contentのように、フィルターをかませてから表示
  echo apply_filter( 'the_content', $p->post_content );
 
  // 3) もしくは
 setup_post_data( $p );
  the_content();

}

WP_Query()のケース

もしQuery オブジェクトなら、いつものメインループと似ていて、気もちがいいです。

$my_query = new WP_Query( $arg );

while ( $my_query->have_posts() ) {
  $my_query->the_posts();

  the_content();
}

どちらも、あとで、メインクエリの投稿を参照したければ、wp_reset_postdata()を実行するのを忘れずに。

2つの方法がありますが、私はウィジェットなど、規模の小さいときはget_posts、もうすこし規模の大きい投稿を表示するときは、WP_Queryを使います。後者の方が、いつも必ず同じ書き方ができるのでコードが読みやすくはなります。

 

参考