複数の投稿(カスタム投稿)を全部ひっくるめて、特定のカテゴリ内容のみを表示する方法
題名から見てもややこしそうなものですが、これを知ればあなたもWPマスターの仲間入り!?
というくらい、汎用性の高いテクニックをご紹介します。
例えば、複数の投稿があったとします。
普通の投稿(post)
カスタム投稿1(custom_1)
カスタム投稿2(custom_2)
上記の3つの投稿は、下記のカテゴリ群を使用しているとします。
新着情報(カテゴリID = 1)
スタッフブログ(カテゴリID = 2)
商品について(カテゴリID = 3)
それでは、表題の「複数の投稿(カスタム投稿)を全部ひっくるめて、特定のカテゴリ内容のみを表示する方法」の例をいくつか見ていきましょう。
例1) カスタム投稿1(custom_1)から、スタッフブログ(カテゴリID = 2)を最大5件抽出する場合、下記のようなコードになります。
1 2 3 4 5 6 7 |
<?php $loop_news = new WP_Query( array( 'post_type' => 'custom_1' , 'posts_per_page' => 5 ,'category__in' => 2)); ?> <?php while ( $loop_news->have_posts() ) : $loop_news->the_post(); ?> <dl> <dt><?php echo get_the_date(); ?></dt> <dd><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></dd> </dl> <?php endwhile; ?> |
‘post_type’:スラッグ名。普通の投稿は「post」、カスタム投稿は任意のスラッグ。
‘post_per_page’:最大表示件数。5件なら「5」、300件なら「300」。
‘category__in’:カテゴリID。 (IDを調べる便利なプラグインの紹介はこちら)
※ループ内の<dl>リスト内は、あくまでも例です。
例2)普通の投稿(post)とカスタム投稿1(custom_1)を足し合わせた中から、スタッフブログ(カテゴリID = 2)を最大5件抽出する場合、下記のようなコードになります。
1 2 3 4 5 6 7 |
<?php $loop_news = new WP_Query( array( 'post_type' => array('post','custom_1') , 'posts_per_page' => 5 ,'category__in' => 2)); ?> <?php while ( $loop_news->have_posts() ) : $loop_news->the_post(); ?> <dl> <dt><?php echo get_the_date(); ?></dt> <dd><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></dd> </dl> <?php endwhile; ?> |
post_typeの指定が複数になる場合は、「array(’A’、’B’)」のように、配列を使うんです。
例3)普通の投稿(post)とカスタム投稿1(custom_1)を足し合わせた中から、新着情報(カテゴリID=1)と、スタッフブログ(カテゴリID = 2)をを最大10件抽出する場合、下記のようなコードになります。
1 2 3 4 5 6 7 |
<?php $loop_news = new WP_Query( array( 'post_type' => array('post','custom_1') , 'posts_per_page' => 10 ,'category__in' = array('1','2'))); ?> <?php while ( $loop_news->have_posts() ) : $loop_news->the_post(); ?> <dl> <dt><?php echo get_the_date(); ?></dt> <dd><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></dd> </dl> <?php endwhile; ?> |
以上となります。
このような使い方をしたいという要望が多く、私も色々と調べてみた結果、上記の方法を使っています。
参考になれば幸いです^^
公開日:2016年3月26日
最終更新日:2016年4月8日