WordPressでよく出くわす記事一覧の表示。
最新記事を表示するだけでなく、特定カテゴリの記事だけを表示したり、件数を指定することもできます。
今回は、色々な条件を指定して、記事一覧を取得する方法をご紹介します。
目次
最新記事の一覧を表示(条件指定なし)
まず基本として、記事一覧を表示するにはループ処理を書く必要があります。
下記をコピペして、①と②に内容を書けば最新記事が表示できます。
<?php if(have_posts()): ?> <?php while(have_posts()): the_post(); ?> <!-- ①繰り返し処理する内容 --> <?php endwhile; ?> <?php else: ?> <!-- ②投稿データが取得できない場合の処理 --> <?php endif; ?>
一例として、①と②に記事一覧表示用のhtmlを書いたバージョンも紹介しておきます。
※ulタグは繰り返さないので、whileの外に書いています。
<?php if(have_posts()): ?> <ul> <?php while(have_posts()): the_post(); ?> <li> <h2><a href="<?php the_permalink(); ?>">記事タイトル</a></h2> <p>概要文が入ります概要文が入ります概要文が入ります。</p> </li> <?php endwhile; ?> </ul> <?php else: ?> <p>記事がありません。</p> <?php endif; ?>
特定カテゴリの記事一覧を表示
カテゴリや件数など条件を指定する場合は多少書き方が変わります。
下記の書き方で、データベースから色々な条件をつけて記事を呼び出すことができます。
これを「サブループ」と言います。
書き方は下記の通り。
<?php $args = array( 'post_type' => 'post', 'category_name' => 'blog' ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : ?> <?php $args = array( 'post_type' => 'post', 'category_name' => 'blog' ); $the_query = new WP_Query( $args ); while ( $the_query->have_posts() ) : $the_query->the_post(); ?> -ループ内で表示させたい内容を記述- <?php endwhile; wp_reset_postdata(); ?>
‘category_name’ => ‘blog’
というところで、「blog」というカテゴリを指定しています。
ちなみにここは「カテゴリ名」ではなく「カテゴリスラッグ」で指定します。
記事一覧の件数を指定
件数の指定も同じように、サブループで指定します。
<?php $args = array( 'post_type' => 'post', 'posts_per_page' => 3 ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : ?> <?php $args = array( 'post_type' => 'post', 'category_name' => 'blog' ); $the_query = new WP_Query( $args ); while ( $the_query->have_posts() ) : $the_query->the_post(); ?> -ループ内で表示させたい内容を記述- <?php endwhile; wp_reset_postdata(); ?>
‘posts_per_page’ => 3
というところで、記事の件数を数字で指定します。
カスタム投稿タイプの記事一覧を表示
カスタム投稿タイプの記事一覧を表示する時もサブループを使います。
カスタム投稿などの投稿の種類を指定する場合は、’post_type’のところで指定します。
<?php $args = array( 'post_type' => 'item', 'posts_per_page' => 3 ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : ?> <?php $args = array( 'post_type' => 'post', 'category_name' => 'blog' ); $the_query = new WP_Query( $args ); while ( $the_query->have_posts() ) : $the_query->the_post(); ?> -ループ内で表示させたい内容を記述- <?php endwhile; wp_reset_postdata(); ?>
例えば「item」というカスタム投稿の場合は
‘post_type’ => ‘item’
とpost_typeを指定します。
ちなみに、通常の投稿を表示する場合は、これまでの例のとおり
‘post_type’ => ‘post’
と書きます。