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

一覧の条件を指定するには、ループの直前にquery_postsでカテゴリや表示数などの条件を加えることができる。カテゴリ”ニュース”を指定するには、
[sourcecode language=’php’]
query_posts($query_string .”&category_name=news”);
[/sourcecode]
というようにスラッグで指定するといいのだが、スラッグはひとつしか指定することができない。複数(たとえば”英語”の”ニュース”)を指定する場合には、
[sourcecode language=’php’]
query_posts($query_string .”&cat=” .get_category_by_slug(‘news’)->term_id) .”,” .&cat=” .get_category_by_slug(‘english’)->term_id));
[/sourcecode]
というようにterm_idで指定するしかない。この場合はカテゴリが”英語”または”ニュース”の記事が表示される。両方の条件を満たす記事を表示する場合には、category__andというパラメータを使う。
[sourcecode language=’php’]
query_posts(array(‘category__and’=>array(get_category_by_slug(‘news’)->term_id, get_category_by_slug(‘english’)->term_id)));
[/sourcecode]

これではまだ”ニュース”の子孫カテゴリが拾ってこれない。”ニュース”の子孫と”英語”の両方を満たす記事を表示する場合は、ちょっとまわりくどいが以下の記述で実現した。
[sourcecode language=’php’]
query_posts(array(‘category_name’=>’news’, ‘category__and’=>array(get_category_by_slug(‘english’)->term_id),’showposts’=>5));
[/sourcecode]

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

コメントを残す

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

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