tax_queryを使ってカスタム投稿をカテゴリー(ターム)で絞り込みループ文

目次

WordPressサイトといえばループ文

WordPressといえば、投稿のループ文!と私は思っているのですが、中でもカスタム投稿は本当に便利な機能(?)ですよね。
例えば、下のメニューのようなカスタム投稿があったらどうでしょうか。

例えば、カスタム投稿(メニュー)のカテゴリー(タクソノミー)は下の3つ

ちょっと変かもしれませんが、コーヒーゼリーは「ドリンク」にも「スイーツ」にも該当するとしましょう。

単一カテゴリー(ターム)で絞り込みループ

ひとつのカテゴリー(タクソノミー)で絞り込む場合、’term’ => ‘bread’の1行だけで絞り込むことができます。

メニューの内のパンを絞り込んだループ文

<?php query_posts( array(
	'post_type' => 'menu', //カスタム投稿名
	'taxonomy' => 'menu_category', //タクソノミータイプ
	'posts_per_page' => -1, //表示件数( -1は全投稿表示 )
	'term' => 'bread' //表示するカテゴリー名
)); ?>
<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
<!-- ここにループ内容 -->
<?php endwhile; else: ?>
<?php endif; ?>
<?php wp_reset_query(); ?>

tax_queryを使って複数カテゴリーで絞り込みループ

複数のカテゴリー(タクソノミー)を絞り込む場合、それらのすべてに該当するものか、どちらかに該当するものかで結果が変わってきます。’tax_query’を使って複数カテゴリーを指定することができます。

メニューの内、ドリンクもしくはスイーツを絞り込んだループ

3つのカテゴリーから、ドリンクとスイーツのものを合わせて絞り込むには、’operator’ => ‘IN’を用います。

<?php query_posts( array(
	'post_type' => 'menu', //カスタム投稿名
	'taxonomy' => 'menu_category', //タクソノミータイプ
	'posts_per_page' => -1, //表示件数( -1は全投稿表示 )
	'tax_query' => array (
			array (
					'taxonomy' => 'menu_category',
					'field' => 'slug',
					'terms' => array ( 'drink', 'sweets' ),
					'operator' => 'IN' //('AND'どちらも / 'IN'どちらか / 'NOT IN'それら以外)
			),
	)
)); ?>
<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
<!-- ここにループ内容 -->
<?php endwhile; else: ?>
<?php endif; ?>
<?php wp_reset_query(); ?>

メニューの内、ドリンクかつスイーツに該当するものをループ

ドリンクとスイーツのどちらにも該当するものを絞り込むには、’operator’ => ‘AND’を用います。

<?php query_posts( array(
	'post_type' => 'menu', //カスタム投稿名
	'taxonomy' => 'menu_category', //タクソノミータイプ
	'posts_per_page' => -1, //表示件数( -1は全投稿表示 )
	'tax_query' => array (
			array (
					'taxonomy' => 'menu_category',
					'field' => 'slug',
					'terms' => array ( 'drink', 'sweets' ),
					'operator' => 'AND' //('AND'どちらも / 'IN'どちらか / 'NOT IN'それら以外)
			),
	)
)); ?>
<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
<!-- ここにループ内容 -->
<?php endwhile; else: ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
目次
閉じる