目次
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(); ?>
