この記事は最後に更新してから1年以上経過しています。
説明
2日にわたって投稿した「query_posts(WP_Queryクラス)でカテゴリーを絞り込む」「query_posts(WP_Queryクラス)で投稿タグを絞り込む」の続き。今日はカテゴリーや投稿タグ以外ののタクソノミーによる絞り込み、複数のタクソノミーの絞り込みの組み合わせについてまとめてみる。そもそも一連の投稿のきっかけになったのは、新テーマ「Twenty Eleven」の短冊ウィジェットがきっかけだった。その部分はこちら。
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'terms' => array( 'post-format-aside', 'post-format-link', 'post-format-status', 'post-format-quote' ),
'field' => 'slug',
'operator' => 'IN',
),
),
投稿フォーマットが「標準」の投稿記事
投稿フォーマットで絞り込む際に注意する点は、投稿フォーマットとして「標準」が指定された投稿記事の場合。これは内部的に「標準」という投稿フォーマットは存在していないためで、投稿フォーマットが「標準」の投稿記事を取得する場合は次のように指定する必要がある。query_posts( array(
'tax_query' => array(
array(
'taxonomy'=>'post_format',
'terms'=>array( 'post-format-aside', 'post-format-link', 'post-format-gallery', 'post-format-image', 'post-format-status', 'post-format-quote' ),
'field'=>'slug',
'operator'=>'NOT IN'
),
'relation' => 'AND'
)
)
);
組み合わせは自由自在
ここまで'tax_query'を使用してカテゴリー、投稿タグ、投稿フォーマットそれぞれの絞り込み方法を紹介してきた。'tax_query'を使うメリットは、どのタクソノミーであってもIDだけでなくスラッグを指定でき、さらに複数の条件を組み合わせるが可能なことだ。例えば、'news'または'topics'カテゴリーに属し、'product'または'service'という投稿タグが付いた投稿記事を絞り込む場合は
query_posts( array(
'tax_query' => array(
array(
'taxonomy'=>'category',
'terms'=>array( 'news', 'topics' ),
'field'=>'slug',
'include_children'=>true,
'operator'=>'IN'
),
array(
'taxonomy'=>'post_tag',
'terms'=>array( 'product', 'service' ),
'field'=>'slug',
'operator'=>'IN'
),
'relation' => 'AND'
)
)
);
また、'news'または'topics'カテゴリーに属し、'service'および'price-down'という投稿タグが付いた投稿記事を絞り込む場合は
query_posts( array(
'tax_query' => array(
array(
'taxonomy'=>'category',
'terms'=>array( 'news', 'topics' ),
'field'=>'slug',
'include_children'=>true,
'operator'=>'IN'
),
array(
'taxonomy'=>'post_tag',
'terms'=>array( 'service', 'price-down' ),
'field'=>'slug',
'operator'=>'AND'
),
'relation' => 'AND'
)
)
);
さらに、上記と同じ条件で投稿フォーマットのアサイドまたは引用の投稿情報を絞り込む場合は
query_posts( array(
'tax_query' => array(
array(
'taxonomy'=>'category',
'terms'=>array( 'news', 'topics' ),
'field'=>'slug',
'include_children'=>true,
'operator'=>'IN'
),
array(
'taxonomy'=>'post_tag',
'terms'=>array( 'service', 'price-down' ),
'field'=>'slug',
'operator'=>'AND'
),
array(
'taxonomy' => 'post_format',
'terms' => array( 'post-format-aside', 'post-format-quote' ),
'field' => 'slug',
'operator' => 'IN',
),
'relation' => 'AND'
)
)
);
'taxonomy'と'term'の場合
おまけとして、最後にquery_posts関数(WP_Queryクラス)の'taxonomy'と'term'によるタクソノミーの絞り込みパラメータについて触れておく。例えば'news'カテゴリーで絞り込む場合は次のように指定できる。query_posts( 'taxonomy=category&term=news' );
この指定は、内部では次に示す'tax_query'パラメータとして展開されている。
'tax_query' => array(
array(
'taxonomy'=>'category',
'terms'=>array( 'news' ),
'field'=>'slug',
'operator'=>'IN'
),
'relation' => 'AND'
)
最終更新 : 2011年09月14日 18:23
関連
お勧め
wp_add_post_tags(2012年7月5日 更新)
mixed wp_add_post_tags( [ int $post_id = 0 [ , string $tags = '' ] ] )
投稿情報に投稿タグを追加する。
get_tags(2018年5月27日 更新)
array get_tags( [ mixed $args = '' ] )
条件を指定してタグ情報を検索し、マッチしたすべてのタグ情報を取得する。
wp_array_slice_assoc(2022年2月2日 更新)
array wp_array_slice_assoc( array $array, array $keys )
キーを指定して配列の一部を抽出する。
get_post_permalink(2022年11月6日 更新)
string | false get_post_permalink( [ int | WP_Post $id$post = 0 [ , bool $leavename = false [ , bool $sample = false ] ] ] )
カスタム投稿タイプの投稿ページのパーマリンクを取得する。
remove_query_arg(2024年3月21日 更新)
string remove_query_arg( string | string[] $key [ , bool | string $query = false ] )
クエリーURIからパラメータ(キー名=値)を削除する。