コンテンツ
メインクエリを書き換えてしまうquery_postsは非推奨です!
query_posts()について
記事データを取得する際に、未だにquery_posts()を使ってループを回してませんか?
私、油断したら使ってしまっていることがあります。
この様な使い方をしますね。
<?php query_posts("post_type=post&posts_per_page=10&paged=" . $paged); ?>
<?php if(have_posts()) : ?>
<?php while(have_posts()): the_post(); ?>
<?php the_title(); ?>
<?php the_excerpt(); ?>
・
・
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?> ← 忘れずに
で、今更なんですが、query_posts()は非推奨になっています。
理由は、
・SQLクエリを再実行するので非効率
・メインクエリを書き換えてしまう為に、ページングなど一部の処理で正常に動作しないことがある
の2点です。
それでは、"記事データを取得するには何を使えばいいの?"となりますが、
WP_Queryかget_posts()を使用するようにして下さい。
query_posts()のようにメインクエリを書き換えずに、サブクエリを生成して取得するので、
現在は、いずれかを使用する方法が推奨されています。
WP_Queryとget_posts()
WP_Queryはクラスとして定義されており、オブジェクトとして生成されたデータを扱うのに対して、
get_posts()は関数として定義されていて、配列としてデータを扱います。
具体的には、以下のような使い方をします。
WP_Queryクラス
<?php $args = array("post_type" => "post", "posts_per_page" => 12, "paged" => $paged); ?>
<?php $the_query = new WP_Query($args); ?>
<?php if($the_query->have_posts()) : ?>
<?php while($the_query->have_posts()) : $the_query->the_post(); ?>
<?php the_title(); ?>
<?php the_excerpt(); ?>
・
・
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); //リセット ?> ← 忘れずに
get_posts()
<?php $args = array("post_type" => "post", "posts_per_page" => 12); ?>
<?php $myposts = get_posts($args); ?>
<?php if($myposts): ?>
<?php foreach($myposts as $post) : setup_postdata($post); ?>
<?php the_title(); ?>
<?php the_excerpt(); ?>
・
・
<?php endforeach; ?>
<?php endif; ?>
<?php wp_reset_postdata(); //リセット ?> ← 忘れずに
WP_Queryクラスとget_posts() どちらを使えばいいの?
何をやるのかにもよりますが、記事データを取得して表示させたいだけであれば、
どちらでも問題ないです。
私はWP_Queryを使うことが多いですが、
get_posts()の方がループ処理を簡単に書けるので使い易いかと思います。
複雑な検索条件を設定する場合には、WP_Queryを使って下さい。
因みに、get_posts()もWP_Queryを呼び出して使っているようです。
この記事へのコメントはありません。