WordPressの $query_string はすごい有効

WordPressでサイトやHPを構成する場合、ページIDや投稿カテゴリIDによる「条件分岐」を行うケースが多くなります。特に多数の商品を扱うショッピングサイトのような構成、あるいはポータルサイトに近い規模のサイトなど。

例えば、ページID「3」の場合は、ページID「3」専用のCSSのclassを適応させる、など、サイトによっては事細かに条件分岐してやる必要が出てくるのですが、その時に使用するテンプレートタグが
[php] <?php
query_posts();
?>
[/php] になります。

しかしここで注意が必要なのは、DBにクエリを投げっぱにすると、ループにハマって抜けれなくなる場合があり(> <)、他の条件分岐を複数差し込みたい場合に行き詰まってしまいます。

その場合の処理の方法ですが、
(1)ページID「3」の場合にCSSの条件分岐を行い、且つ
(2)カテゴリID「1,3,5」の最新記事を10件表示し、且つ
(3)カテゴリID「2,4,6,8,10」の最新記事をサイドメニューに1件ずつ表示する、且つ…
のような条件分岐を同一ページ内で行う場合は、例えば
(2)と(3)の処理の前に
[php] $query_string
[/php] を挟んであげると、(2)の条件の影響を関わらず(3)の処理を行うことが可能になります。

条件分岐の多様により、ループごとに条件を指定してあげないといけない場合は、処理と処理の間に
[php] query_posts($query_string);
[/php] を挟んでみてください。

詳しい記述の方法や事例などは
http://wpdocs.sourceforge.jp/テンプレートタグ/query_posts
の他、調べてみると
http://blog.btmup.com/wordpress/query_posts-clear.html
サイト内にも記載されておりました。
(こちらのサイト様の方がすごくシンプルに解説されております♪)

さて余談ですが、当方のサイトでもそうですが、あまりにクエリ投げまくってるせいか、「そもそもクエリの数を見直した方が良いじゃね??」という問題と現在格闘しております。

サイト表示速度への影響やDB負荷の面もありますので、特に商用、公的なサイトの場合は、「その処理が本当に必要かどうか?」をじっくり検討されてから導入されるのが良いかもしれません。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください