WP:WordPress(ワードプレス)

【WordPress】query_postsは非推奨です。WP_Queryかget_postsを使いましょう!

メインクエリを書き換えてしまう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_Queryget_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を呼び出して使っているようです。

この記事を書いている人
株式会社ディープ

名前ダッチ

メールアドレスadachi@deep-deep.jp

Twitterはこちら >>

関連記事

最近の記事

  1. アフィリエイト
  2. VPSサーバー
  3. ブログのネタ探し
  4. プログラミング
  5. SSLとは
  6. 常時SSL通信設定後にやっておくべきこと
  7. 常時SSL通信設定方法
  8. htaccessとは
  9. WordPress
  10. WordPress

Twitter

ダッチ@職業ブロガー兼プログラマー
@gatsu0000

アーカイブ

PAGE TOP