カテゴリ一覧を表示するとき、あるタグが付いているものだけ表示させたいことってありますよね?
例えば、”flower/arrange/antique/”みたいなカテゴリがあって、これをさらに”selection”と”library”に分けたいと。
普通にやれば、”flower/arrange/antique/selection”と”flower/arrange/antique/library”にすればいいんだけど、”library”は”selection”を含んでいると。
あ、だったら、”flower/arrange/antique/selection”と”flower/arrange/antique”でいいじゃんということか。かーいーけーつ!
という解決方法もありますが、テンポラリな”selection”チョイスをするためだけにもう一段サブカテゴリを作るのはどうかと。
クイック編集で変更するときもカテゴリは階層化されて表示されないので、間違いやすいけど、タグに”select”とか付けておくだけなら楽だし。というような用途があったとして(我田引水的に)。
“selection”と”library”を分けるには、”library”の場合だけ、URLに”?lib”とかを付けておいて、($_GET[“lib”] == NULL)で判断するというのがオススメ。あと、”selection”の場合は
1 2 3 4 5 | if ( $_GET [ "lib" ] == NULL) { query_posts( array ( 'category__in' => $cat , 'tag_slug__and' => 'select' , 'posts_per_page' => 8)); if (have_posts()) { while (have_posts()) { the_post(); |
query_posts()に配列で引数を渡してやるのがミソです。”&tag=文字列”というパラメータもあるのですが、バグなんでしょうか、効かないですね。
この場合、子カテゴリがない前提で書いてますけど、子供があるんだったら、こんな風にやればいいそうですよ。
1 2 3 4 5 6 7 | $include_cats = explode ( '/' , $cat . get_category_children( $cat ) ); $args = array ( 'category__in' => $include_cats , 'tag__and' => array ( 12 ) ); query_posts( $args ); $wp_query ->query_vars[ 'cat' ] = $cat ; |
※ こちら(query_postsでカテゴリとタグ両方での絞り込み)で勉強しました。
※ 大元のページはこっち(テンプレートタグ/query posts)。