以前の勉強会でもネタにしましたが、追記です。
友達がイラストを描いてくれました。
全貌はこちらから http://www.pixiv.net/member_illust.php?mode=medium&illust_id=53687972
WordPressのクエリについてちゃんと知りたい!という方は、Codexを参照ください。(2015.12.07追記)
https://wpdocs.osdn.jp/クエリ概要
解説します。
WPサイトでは、サイト内のページにアクセスがあった時、どのページを表示させたいとリクエストされているのかをURLから理解してデータベースに必要なデータを要求(クエリ)し、データの塊を用意する、という一連の処理が自動で行われています。これがメインクエリ。
そして、メインクエリで得られたデータの塊を実際に出力するために、「メインループ」を利用します。
テンプレートに書かれている、あの決まり文句のようなテンプレートタグですね。
<?php if (have_posts() ) : ?> <?php while (have_posts()) : the_post(); ?> モニョモニョ <?php endwhile; ?> <?php endif; ?>
モニョモニョとかいた部分にはhtmlであったり、テンプレートタグなどを駆使して表示したい内容をコーディングします。
ループ内でのみ使えるタグの代表的なものは、the_content()、the_titile()、the_permalink()、the_post_thumbnail()、などでしょうか。全てではないかもしれませんが、the_から始まるものが多いかも。
メインクエリはリクエストされたページによって異なります。
例えばシングルページなら、該当するIDの投稿1記事分のみであったり、固定ページならこちらも該当するIDのページ1記事分。カテゴリーアーカイブでは指定されたカテゴリの新しい記事から10件、という風に、あらかじめ決まっています。
実際にお客様との会話で、「このページのURLは○○にしたい」と指定があった時に、「すみません、難しいです・・・・」と断らざるを得ない場合があります。
なぜか。
アクセスがあったURLによってメインクエリが発生するということは、つまり、このURLだったらこのメインクエリ、という風にある程度ルールが決まっていて、そのルールから逸脱するようなURLは作りにくい、ということなのです。
これは、パーマリンクの設定とも深く関わりますが、いくつか具体的な例を考えてみます。
C-Labo.のサイトを例にあげます。
パーマリンクは下記のように設定してあります。
制作実績を作るために、カスタム投稿を設定しています。
カスタム投稿のスラッグはworksです。この時、カスタム投稿のアーカイブのページは、
http://www.ccc-labo.net/works/
となります。なぜか?そういうルールだからです。
そして、カスタム投稿内のシングルページは、スラッグがlearningである場合、
http://www.ccc-labo.net/works/learning/
となります。
では、制作実績を分類するために、カスタムタクソノミーを設定したとしましょう。カスタムタクソノミーのスラッグが works_cat である時で、「Web関係」というターム(スラッグはweb)のアーカイブは、
http://www.ccc-labo.net/works_cat/web/
となります。そういう決まりです。
よくあるのが、この時に下記のようなURLにできないのか?という問い合わせです。
http://www.ccc-labo.net/works/web/
うーん・・・・・・私は、方法がわからないので、お断りしてしまいます(解決策をご存知の方がいらっしゃったら教えてください〜。)カスタム投稿内のシングルページのURLと似ていて、区別ができないんじゃないかな・・・と思ってしまいます。おそらく.htaccessでいろいろ書くとできるのかもしれません。ただ、管理が煩雑になるので、妥協案として下記のようなURLを提案したりします。
http://www.ccc-labo.net/works/cat/web/
お茶を濁す程度ではありますが・・・・・。これは、リライトルールを書けば変更することができます。これはまた別途記事にしますね。
脱線しますが、パーマリンクのところで冒頭に/blog と入れているのは、ブログ(投稿)の記事のURLに/blogをつけるためです。
http://www.ccc-labo.net/blog/2015/11/post-104/
http://www.ccc-labo.net/blog/category/未分類/
こんな感じのURLにすることができます。固定ページは影響を受けませんし、カスタム投稿タイプでも設定次第で影響がなくなるので、こんな風に書けば実現できます。一応また別記事書きます。ブログの記事なんだな、と、URLを見て分かりやすくなるのでいいなあ、と個人的には思っておりますが。
話を戻しまして、メインクエリですが、いかがでしょうか?イメージがつかめましたでしょうか?
カテゴリーアーカイブのページにアクセスしたらカテゴリーの記事が数件表示されるとか、当たり前じゃないですか、と思われると思いますが、WPくんがクエリを予め決めていて、リクエストに答えて実行しているので「当たり前」が実現しているわけですねー。
メインクエリをちょこっとだけ書き換えることは、比較的容易にできます。1ページに表示する件数を変えたり、アーカイブであるカテゴリの記事だけ外したりなどです。
ですが、大幅な変更はできません。また、先ほども例に挙げたようにURLもルールが存在し、全く自由に設定できるわけではありません。WPサイト設計の際にはメインクエリとアクセスするURLに注意してある程度決めてしまい、提案するようにすると、スムーズに進むのではないかと思います。
まだ書き足りないので、続くと思います!