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

関連記事

最近の記事

  1. WP:WordPress(ワードプレス)
  2. URL設計(URLデザイン)
  3. URL「ディレクトリ名」と文字アンダースコア(_)とハイフン(-)
  4. SEO対策(外部ファイルの読み込み)
  5. URL リダイレクト
  6. インデックスされない
  7. 内部対策は必要?
  8. CMS(シーエムエス)
  9. SEO業者は必要?
  10. SSL(HTTPS)

Twitter

  • 機械学習を少し勉強してみて思ったのは、Pythonがよく使われるのは便利なライブラリーが揃っているので、楽!というだけ。 多分、Pythonを使えば、数学なんて全く分からんくても、勉強して流れさえ掴めば、誰にでも出来る分野だという… twitter.com/i/web/status/1…
    about 1日 ago via Twitter Web App

アーカイブ

PAGE TOP