
カスタム投稿タイプを作成し、投稿できるようになっても、いざ表示させようと思ったら、いろんな方法があって、戸惑ってしまいます。
今日は、トップページやサイドバーなどのウィジェットで、特定のカスタム投稿タイプを表示したいときの、ループの書き方を紹介したいと思います。
※固定ページでも使用できます。
サブループ(カスタムループ)で、特定のカスタム投稿タイプを表示する
「gourmet」というカスタム投稿タイプを、トップページやウィジェットなどで表示するという例です。
経験上、メインループに影響を与えないサブループ(カスタムループ)で記述しておくほうが安全ですね。
※以前、メインループの記述方法で書いて、ページネーションでおかしなことになってしまいました…。
また、サブループの記述方法には、「WP_Query()」と「get_posts()」がありますが、「WP_Query()」の方がより複雑な処理を行うことができます。
※メインループは、アーカイブページなどでページ送りが必要な時に使います。
1-1. WP_Query()
もっぱら、こちらばかり使用しています。
<?php $args = array( 'post_type' => 'gourmet', /* カスタム投稿名が「gourmet」の場合 */ 'posts_per_page' => 5, /* 表示する数 */ ); ?> <?php $my_query = new WP_Query( $args ); ?> <ul> <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?> <!-- ▽ ループ開始 ▽ --> <li> <h3><?php the_title(); ?></h3> <p class="published"><?php the_time( get_option( 'date_format' ) ); ?></p> </li> <!-- △ ループ終了 △ --> <?php endwhile; ?> </ul> <?php wp_reset_postdata(); ?>
※「wp_reset_postdata();」でリセットは必須。
- 参考サイト
1-2. get_posts()
私はめったに使わないのですが…。(覚えにくくて苦手なだけです)
<?php $args = array( 'post_type' => 'gourmet', /* カスタム投稿名が「gourmet」の場合 */ 'posts_per_page' => 5, /* 表示する数 */ ); ?> <?php $my_posts = get_posts( $args ); ?> <ul> <?php global $post; foreach ( $my_posts as $post ) : setup_postdata( $post ); ?> <!-- ▽ ループ開始 ▽ --> <li> <h3 class="title"><?php the_title(); ?></h3> <p class="published"><?php the_time( get_option( 'date_format' ) ); ?></p> </li> <!-- △ ループ終了 △ --> <?php endforeach; ?> </ul> <?php wp_reset_postdata(); ?>
※「wp_reset_postdata();」でリセットは必須。
- 参考サイト
▼ 出力結果
出力結果は、「WP_Query()」も「get_posts()」も同じです。<ul> <li> <h3 class="title">記事5</h3> <p class="published">2017年2月20日</p> </li> <!-- 新着5件分をループで表示 --> <li> <h3 class="title">記事1</h3> <p class="published">2017年2月18日</p> </li> </ul>