表示条件に複数カテゴリを指定する

一覧の条件を指定するには、ループの直前にquery_postsでカテゴリや表示数などの条件を加えることができる。カテゴリ”ニュース”を指定するには、

query_posts($query_string ."&category_name=news");

というようにスラッグで指定するといいのだが、スラッグはひとつしか指定することができない。複数(たとえば”英語”の”ニュース”)を指定する場合には、

query_posts($query_string ."&cat=" .get_category_by_slug('news')->term_id) ."," .&cat=" .get_category_by_slug('english')->term_id));

というようにterm_idで指定するしかない。この場合はカテゴリが”英語”または”ニュース”の記事が表示される。両方の条件を満たす記事を表示する場合には、category__andというパラメータを使う。

query_posts(array('category__and'=>array(get_category_by_slug('news')->term_id, get_category_by_slug('english')->term_id)));

これではまだ”ニュース”の子孫カテゴリが拾ってこれない。”ニュース”の子孫と”英語”の両方を満たす記事を表示する場合は、ちょっとまわりくどいが以下の記述で実現した。

query_posts(array('category_name'=>'news', 'category__and'=>array(get_category_by_slug('english')->term_id),'showposts'=>5));

もうちょっとスマートな方法はないかな?

コメントを残す

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>