query_postsは非推奨?代わりにget_postsで条件指定!投稿を取得する方法【WordPress】
投稿のループで、カテゴリを指定や除外したり、表示順や表示数を変更したりするなら…get_postsを使いましょう!
- 非推奨?のテンプレートタグ「query_posts」
- query_postsの代わり使える?テンプレートタグ「get_posts」
- 条件の因数、入力例
- まとめ:ループの条件指定には「get_posts」を
WordPressで投稿記事を表示させたい時に使うのがループ文ですね。
<?php if(have_posts()): while(have_posts()): the_post(); ?>
こんな感じで、投稿記事を表示させるループが始まる訳です。
ループの終わりにはこちら。
<?php endwhile; endif; ?>
しかし、これではデフォルトの表示しかされません。
該当カテゴリの、設定件数の、デフォルト順で表示されてしまうので、これだけでは融通が利かないのです。
そこで今回は、細かい条件指定のできる投稿の取得方法をご紹介します。
非推奨?のテンプレートタグ「query_posts」
以前から使っていたのが「query_posts」でした。先ほどのループの前に
<?php query_posts( 'posts_per_page=25&cat=10&order=ASC' ); ?>
このような指定をするだけで、「カテゴリIDが10に該当した投稿が1ページ25件、古い順に表示される」という条件が組み込まれます。
<?php wp_reset_query(); ?>
query_postsを使った場合は、最後に「reset_query」でリセットしてあげてくださいね。
しかし、この「query_posts」、どうやら非推奨とされているみたい。
query_posts() はページ内のメインクエリーを書き換え、新しいクエリーのインスタンスと置き換えるために使う関数としては過度に単純化され、問題が発生しやすい方法です。(中略)モダンな WordPress コードではもっと安定したメソッドを使うべきです(中略)ひとことで言うと、query_posts() は決して使うべきではありません。 (省略)一般的な投稿の取得には、WP_Query または get_posts を使ってください。
引用元:WordPress Codex
安定してないから使わない方がいい、みたいなことが書いてあります。
そしてここに出てきたのが「get_posts」。
query_postsの代わり使える?テンプレートタグ「get_posts」
さて、先ほどquery_postsで指示した条件は「カテゴリIDが10に該当した投稿が1ページ25件、古い順に表示される」というものでした。これと同じ指定を「get_posts」でも出来るようなのです。
<?php $args = array( 'posts_per_page' => 25, 'category' => 10, 'order'=> 'ASC' ); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
こんなかんじ。参照:WordPress Codex
これで、同じ条件のループが完成しました。
このループを終わらせる時には下記を入力しましょう!
<?php endforeach; wp_reset_postdata();?>
条件の因数、入力例
よく使用する条件の例をご紹介します。お好きな因数を入力して自由にカスタマイズしてください。1ページに表示させる投稿の数
'posts_per_page' => 9
で、1ページに9件表示されます。お好きな数字に変えましょう。投稿順の変更
'order'=> 'DESC'
降順。大きい順で並びます。新しい順で並べたい時はこちら。'order'=> 'ASC'
昇順。小さい順で並びます。古い順で並べたい時はこちら。カテゴリーの指定・除外
'category' => 10
カテゴリID 10を指定。'category' => -10
カテゴリID 10を除外。'category' => '-10,-12'
カテゴリID 10と12を除外。まとめ:ループの条件指定には「get_posts」を
query_postsがどうやら非推奨である件についてはどうやら諸説ありますが、この場合は同じ条件を指示できる「get_posts」を使うのが賢明でしょう。カテゴリを指定したり、除外したり、表示順を変更したり、投稿数を指定したり・・・。
この組み合わせだけで、表示の自由度が格段に上がるはず。
以上、WordPressに関する備忘録でした。
にほんブログ村
ブログでご紹介いただきました
sugadog.hatenablog.jp
私もquery_postsの代わりを探すのに苦労したので、少しは手助けになったようでしたら幸いです!!
ちなみにページ送りでつまづいたとのことですが、固定ページのページ送りの場合、ループに固定ページであること「'paged' => $paged」を付け足すと解決できた例がありますので、もしかしたらget_postsに追記するとできる可能性もあるかもしれない!どうだろう・・・
超便利!カスタム投稿タイプが簡単に作れるCustom Post Type UIの使い方と表示方法を解説! - misallychan.com