こんにちは。シンノスケです。
改めて、このブログをはじめた目的を思い出すと、インプットだけでなく、きちんとアウトプットできるようになりたいというものでした。そもそも、アウトプットを前提としないと、インプットもいい加減になってしまいます。きちんとブログとしてアウトプットすることで自分自身の理解を深めたいと思いました。
ぜんぜん違うぜコラ!と教えていただける親切な方がいらっしゃいましたら、Twitterなどでご指摘くれると嬉しいです。
WP_Queryって何?僕の理解
WordPressの中にある投稿(ブログ、固定ページなど)を様々な条件を指定して取り出すための関数です。メインループの中で別の記事を取り出したい場合に使われます。
使い所としては、個別記事の中に同じカテゴリを出して関連記事を表示させたり、サイドバーで最新記事を並べるといったところでしょうか。とくにかく、そのページの記事以外の記事を引っ張ってくるときに使うものだと理解しております。
関数と言ってよいのかしら?
この記事を書いていてふと疑問に思い、調べてみました。
■ 関数リファレンス/WP Query – WordPress Codex 日本語版
説明の1行目に書いてありました。
正確にはクラスというものらしい。このへんよくわからないんですよね。クラスとかインスタンスとか、実態ってなんだ?って言う状態です。
■ クラスと関数・変数の違い:逆襲のニート
少し古い記事ですが、なんとなくクラスと関数の違いがわかった気がする。要はデータを格納できるかどうかってことみたいです。
使い方
こんな感じで、パラメーターを指定してあげて、特定の記事を取り出します。パラメーターについては後ろの方のリンク先に詳しく書かれております。
<?php $args = array( 'category_name' => ' cat1 , cat2 ' 'posts_per_page' => 5, ); $the_query = new WP_Query( $args ); ?> <?php if ( $the_query->have_posts() ) : ?> <!-- ループ開始 --> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> // タイトルとか本文とか <?php endwhile; ?> <!-- ループ終了 --> <?php wp_reset_postdata(); ?> <?php else : ?> <p>記事はありません</p> <?php endif; ?>
newってなんだ?
前から疑問だったのですが、WP_Queryの前についてるnewってなんだろう?まぁ、使い方に書いてあるコード全部、おまじないみたいなもんだと思って、特に気にしないようにしていました。改めてググったら、こちらに書いてありました。
■ PHP: クラスの基礎 – Manual
要はクラスであるWP_Queryをnewしてあげると、インスタンスになるということか・・・。
で、インスタンスって何?
まぁ、アレだ。6行目にある、「$the_query」ってとこに、新しくインスタンスとして2行目からに書いてある条件に従って、データを入れましたよってことだよね??
だから、インスタンスって何だってことなんだけど、まぁ、データが入ってる箱みたいなもんでしょ。クラスってのがデータを格納できるものだから。ちょっと今日は時間切れ。また今度、ちゃんと調べよう。
クエリーを元に戻す
これまた15行目の「wp_reset_postdata()」をしてあげることで、メインループの情報に戻るようです。これを忘れてハマったことがあります。
使いどころ
参考サイト
とても参考になりました。ありがとうございます。
■ 関数リファレンス/WP Query – WordPress Codex 日本語版
■ WP_Queryの使い方をPHPコードにまとめた便利なコード・スニペット
■ ちょいちょい忘れる『WP_Query』の使い方 | 予習と復習
APPENDIX
以前サイトを作る際に、トップページに、ブログの一覧だけじゃなくて、お知らせとか、イベントだけまとめて表示させたいって言うリクエストがあったので、3日ぐらいネットをさまよって、コピペしながらなんとか作ったという思い出があります。
その当時はカテゴリの指定と、表示する記事数ぐらいが設定できればよかったのですが、改めて調べると、本当にいろんなことができるんですね。