query_posts(WP_Queryクラス)で投稿タグを絞り込む

query_posts(WP_Queryクラス)で投稿タグを絞り込む - tax_queryを理解する(2)

説明

投稿タグの絞り込みは、カテゴリーに似ているけど微妙に違っている。今日は、昨日投稿した「query_posts(WP_Queryクラス)でカテゴリーを絞り込む」の続きとして、投稿タグの絞り込みついてまとめてみる。
まずはquery_posts(WP_Queryクラス)の投稿タグに関連するパラメータを再確認。
パラメータデータ
tag_id投稿タグのIDを指定'tag_id=21'
tag__in投稿タグのIDを配列で指定array( 'tag__in'=>array( 21, 23 ) )
tag__not_in投稿タグのIDを配列で指定array( 'tag__not_in'=>array( 21, 23 ) )
tag__and投稿タグのIDを配列で指定array( 'tag__and'=>array( 21, 23 ) )
tag投稿タグのスラッグを指定(複数指定する場合は「,」または「+」で区切る)'tag=abc,def'
tag_slug__in投稿タグのスラッグを配列で指定'array( 'tag_slug__in'=>array( 'abc', 'def' ) )
tag_slug__and投稿タグのスラッグを配列で指定'array( 'tag_slug__and'=>array( 'abc', 'def' ) )
カテゴリーの場合と同様、IDを指定するものと、スラッグを指定するものがある。
tag_id
'tag_id'は投稿タグが指定された投稿情報を絞り込む。指定できる投稿タグのIDは常に1つのみ。
query_posts( 'tag_id=21' );
これと同じ意味の指定を'tax_query'を使って指定すると次のようになる。
query_posts( array(
	'tax_query' => array( 
		array(
			'taxonomy'=>'post_tag',
			'terms'=>array( 21 ),
			'include_children'=>true,
			'field'=>'term_id',
			'operator'=>'IN'
			),
		'relation' => 'AND'
		)
	)
);
青字の部分は省略可能な部分。なお投稿タグには親子関係はないので、ここでの'include_children'の指定は意味がない。
tag__in
'tag__in'は複数の投稿タグのIDを指定し、その何れかの投稿タグが指定された投稿情報を絞り込む。
query_posts( array( 'tag__in'=>array( 21, 23 ) );
これと同じ意味の指定を'tax_query'を使って指定すると次のようになる。
query_posts( array(
	'tax_query' => array( 
		array(
			'taxonomy'=>'post_tag',
			'terms'=>array( 21, 23 ),
			'include_children'=>true,
			'field'=>'term_id',
			'operator'=>'IN'
			),
		'relation' => 'AND'
		)
	)
);
'tag_id'の指定との違いは赤字の部分。投稿タグのIDはこの部分に複数指定できる。
tag__not_in
'tag__not_in'は複数の投稿タグのIDを指定し、その何れかの投稿タグも指定されていない投稿情報を絞り込む。
query_posts( array( 'tag__not_in'=>array( 21, 23 ) );
これと同じ意味の指定を'tax_query'を使って指定すると次のようになる。
query_posts( array(
	'tax_query' => array( 
		array(
			'taxonomy'=>'post_tag',
			'terms'=>array( 21, 23 ),
			'include_children'=>true,
			'field'=>'term_id',
			'operator'=>'NOT IN'
			),
		'relation' => 'AND'
		)
	)
);
'tag__in'の指定との違いは赤字の部分。'operator'の値は'NOT IN'になる。
tag__and
'tag__and'は複数の投稿タグのIDを指定し、そのすべての投稿タグが指定されている投稿情報を絞り込む。
query_posts( array( 'tag__and'=>array( 21, 23 ) );
これと同じ意味の指定を'tax_query'を使って指定すると次のようになる。
query_posts( array(
	'tax_query' => array( 
		array(
			'taxonomy'=>'post_tag',
			'terms'=>array( 21, 23 ),
			'include_children'=>true,
			'field'=>'term_id',
			'operator'=>'AND'
			),
		'relation' => 'AND'
		)
	)
);
'tag__in'の指定との違いは赤字の部分。'operator'の値は'AND'になる。
tag_slug__in
これまでの流れでは'tag'の順番になるが、'tag'はパラメータの指定内容によって変化があるので、先に'tag_slug__in'を取り上げる。'tag_slug__in'は'tag__in'と同様に複数の投稿タグを指定し、その何れかが指定された投稿情報を絞り込む。'tag__in'との違いは、IDではなく、スラッグを指定できるところである。
query_posts( array( 'tag_slug__in'=>array( 'good', 'bad' ) );
これと同じ意味の指定を'tax_query'を使って指定すると次のようになる。
query_posts( array(
	'tax_query' => array( 
		array(
			'taxonomy'=>'post_tag',
			'terms'=>array( 'good', 'bad' ),
			'include_children'=>true,
			'field'=>'slug',
			'operator'=>'IN'
			),
		'relation' => 'AND'
		)
	)
);
'tag__in'との違いは赤字の部分。'field'には'slug'を指定する。
tag_slug__and
'tag_slug__and'は'tag__and'のスタッグ版。投稿タグすべてが指定されている投稿情報を絞り込む。
query_posts( array( 'tag_slug__and'=>array( 'good', 'bad' ) );
これと同じ意味の指定を'tax_query'を使って指定すると次のようになる。
query_posts( array(
	'tax_query' => array( 
		array(
			'taxonomy'=>'post_tag',
			'terms'=>array( 'good', 'bad' ),
			'include_children'=>true,
			'field'=>'slug',
			'operator'=>'AND'
			),
		'relation' => 'AND'
		)
	)
);
'tag_slug__in'との違いは赤字の部分。'field'には'slug'を、'operator'は'AND'となる。
tag
'tag'は、'tag_slug__in'や'tag_slug__and'と同様に、投稿タグのスラッグを指定して使用するが、複数の場合でも配列ではなく、スラッグを「,」または「+」で区切って文字列で指定する。この時「,」で区切ると'tag_slug__in'と同様の意味になり、「+」で区切ると'tag_slug__and'と同様の意味になる。
つまり
query_posts( 'tag=good,bad' );
query_posts( array( 'tag_slug__in'=>array( 'good', 'bad' ) );
と同意であり、
query_posts( 'tag=good+bad' );
query_posts( array( 'tag_slug__and'=>array( 'good', 'bad' ) );
さて当然のことだが、'tag'と同意の指定は'tax_query'でも指定可能である。具体的な指定方法については、先に紹介した'tag_slug__in'や'tag_slug__and'の指定方法を参考にしてほしい。
昨日はカテゴリー、今日は投稿タグの絞り込みについて整理したわけだが、場合によってはこれらを組み合わせで使用することがあるだろう。また、標準テーマのTwentyElevenの短冊ウィジェットのように、投稿フォーマットで絞り込むことも可能である。それらについては、次の機会に紹介する。

関連

  • get_query_var - 投稿検索に関連する変数の値を取得する
  • query_posts - 条件を指定して投稿情報をロードする

お勧めコンテンツ

wp_parse_args(2012年7月19日 登録)

array wp_parse_args( mixed $args, mixed $defaults = '' )
クエリー文字列を解析し、各パラメータのデフォルト値とマージした連想配列を取得する。

the_feed_link(2012年2月7日 登録)

void the_feed_link( string $anchor [ , string $feed = '' ] )
フィードのリンクを表示する。

wp_check_password(2013年4月30日 登録)

bool wp_check_password( string $password, string $hash [ , mixed $user_id = '' ] )
ユーザのログインパスワードか調べる。

get_stylesheet_directory(2011年9月28日 登録)

string get_stylesheet_directory( )
現在のテーマ(スタイルシートがあるディレクトリ)のパス名を取得する。

get_previous_post(2010年5月24日 登録)

object get_previous_post( [ bool $in_same_cat$in_same_term = false [ , string $excluded_categoriesmixed $excluded_terms = '' [ , string $taxonomy = 'category' ] ] ] )
1つ前の投稿情報を取得する。

最終更新日時 : 2011-09-14 18:15