このエントリーをはてなブックマークに追加 Twitterでツイート query_posts、なかなかうまく使えない

投稿情報を取得することができるquery_posts関数ですが、使いこなしが難しい関数でもあります。
各ページ用のphpファイルが呼び出された段階ではすでに投稿情報は取得済みで、大雑把な条件は$query_stringに入っています。例えば、abcというslugのカテゴリページの場合なら、$query_stringの中身は、”category_name=abc”といった感じだったかと。この$query_stringに適宜条件を追加し、再度query_posts($query_string)を実行することで、ちょっとしたカスタマイズには対応できたりします。

さてquery_posts関数のパラメータには、文字列以外に連想配列を指定することができます。例えば、abc(id:11)かdef(id:12)のどちらかのカテゴリに属する投稿情報を取得するなら、

$query_term['category__in'] = array(11, 12);
query_posts($query_term);

といった感じになります。この条件であれば文字列パラメータでも指定できるのですが、もう少し複雑な条件を指定できるのが連想配列パラメータを利用するメリットです。

例えば、xyz(id:21)に属し、かつabcかdefのどちらかのカテゴリに属する投稿情報を取得する場合は、

$query_term['category__and'] = array(21);
$query_term['category__in'] = array(11, 12);
query_posts($query_term);

といった感じです。

逆に、abcかdefのどちらかのカテゴリに属し、かつxyzには属さない投稿情報を取得するなら、

$query_term['category__in'] = array(11, 12);
$query_term['category__not_in'] = array(21);
query_posts($query_term);

となり、自由度はかなり高いわけです。

これまでの例はカテゴリベースの検索ですが、タグベースの検索にも対応しています。
タグのidを指定する’tag__and’と’tag__in’、タグのslugを指定する’tag_slug__and’と’tag_slug__in’が用意され、slugでも指定できるのが特徴です(slug指定の場合、実行するクエリのINNER JOINが増えるので、idがわかるのならid指定のほうが検索時間は早いと思います)。

と、いろいろできて便利なquery_posts関数ですが、カテゴリとタグ両方の条件を指定した検索はできないようです。そういった条件の場合に使用するパラメータがあるのかもしれませんが、なかなかそういった情報は見つかりませんでした。
すごく便利なだけに、じっくり時間をかけて調べたいところです。。。

投稿日:2009年9月8日
  • ※コメントは、スパム対策などのためIPアドレスにて制限しております。
  • ※誹謗や中傷、スパムなど、不適切な内容は公開いたしません。ご了承ください。