WordPressでカスタム投稿タイプの特定ターム(term)のみを単一または複数でループ表示したい場合の方法
WordPressの「カスタム投稿」という機能を使った際に、
カスタム投稿用のアーカイブページで、
特定のターム(term)のみをループ表示したい場合の方法をお伝えします。
query_postsで条件を指定します。
複数のタームを表示する際は、複数タクソノミークエリー「tax_query」が便利です。
今回はjapanというカスタム投稿名の、
areaというカスタム投稿分類(タクソノミー)の、
青森(aomori)、岩手(iwate)、宮城(miyagi)に属する記事を表示するという設定です。
<?php $args=array( 'tax_query' => array( array( 'taxonomy' => 'area', //タクソノミーを指定 'field' => 'slug', //ターム名をスラッグで指定する 'terms' => array( 'aomori','iwate','miyagi' ) //表示したいタームをスラッグで指定 ), ), 'post_type' => 'japan', //カスタム投稿名 'posts_per_page'=> 5 //表示件数(-1で全ての記事を表示) ); ?> <?php query_posts( $args ); ?> <?php if(have_posts()): ?> <?php while(have_posts()):the_post(); ?> ページが存在する場合の指定 <?php endwhile; else: ?> ページが存在しない場合の指定 <?php endif; ?> <?php wp_reset_query(); ?>
query_postsを使用する際は、必ず最後に<?php wp_reset_query(); ?>で閉じるようにしましょう。
また、’posts_per_page’=> -1と指定することで、全ての記事を表示することができます。
ちなみに複数のタームではなく、一つのタームだけで良い場合は、
もっと簡単に記述することができます。
<?php query_posts( array( 'post_type' => 'japan', //カスタム投稿名 'taxonomy' => 'area', 'term' => 'aomori', 'posts_per_page' => 5 //表示件数( -1 = 全件 ) )); ?> <?php if(have_posts()): ?> <?php while(have_posts()):the_post(); ?> ページが存在する場合の指定 <?php endwhile; else: ?> ページが存在しない場合の指定 <?php endif; ?> <?php wp_reset_query(); ?>
このように記述することで指定することができます。