WPのメインクエリを理解する

以前の勉強会でもネタにしましたが、追記です。

スクリーンショット 2015-11-28 21.00.52

友達がイラストを描いてくれました。
全貌はこちらから 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.のサイトを例にあげます。
パーマリンクは下記のように設定してあります。

スクリーンショット 2015-11-28 21.37.06

制作実績を作るために、カスタム投稿を設定しています。
カスタム投稿のスラッグはworksです。この時、カスタム投稿のアーカイブのページは、
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/
お茶を濁す程度ではありますが・・・・・。これは、リライトルールを書けば変更することができます。これはまた別途記事にしますね。

スクリーンショット 2015-11-28 21.37.06

脱線しますが、パーマリンクのところで冒頭に/blog と入れているのは、ブログ(投稿)の記事のURLに/blogをつけるためです。

WPサイトに切り替えました。


http://www.ccc-labo.net/blog/category/未分類/
こんな感じのURLにすることができます。固定ページは影響を受けませんし、カスタム投稿タイプでも設定次第で影響がなくなるので、こんな風に書けば実現できます。一応また別記事書きます。ブログの記事なんだな、と、URLを見て分かりやすくなるのでいいなあ、と個人的には思っておりますが。

話を戻しまして、メインクエリですが、いかがでしょうか?イメージがつかめましたでしょうか?
カテゴリーアーカイブのページにアクセスしたらカテゴリーの記事が数件表示されるとか、当たり前じゃないですか、と思われると思いますが、WPくんがクエリを予め決めていて、リクエストに答えて実行しているので「当たり前」が実現しているわけですねー。

メインクエリをちょこっとだけ書き換えることは、比較的容易にできます。1ページに表示する件数を変えたり、アーカイブであるカテゴリの記事だけ外したりなどです。
ですが、大幅な変更はできません。また、先ほども例に挙げたようにURLもルールが存在し、全く自由に設定できるわけではありません。WPサイト設計の際にはメインクエリとアクセスするURLに注意してある程度決めてしまい、提案するようにすると、スムーズに進むのではないかと思います。

まだ書き足りないので、続くと思います!

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です