WordPress サイトの新着情報一覧表示や投稿表示など、CMS たらしめるためのループ表示に使うスニペットをいくつかここにメモしておきます。
基本的な投稿表示ループから、新着情報の表示件数を指定するループ、カテゴリー指定のループなど便利なものをみつくろいました。
基本のループ
1 2 3 4 5 |
<?php if(have_posts()): while(have_posts()): the_post(); ?> //ここに内容 <?php endwhile; endif; ?> |
固定ページの内容や投稿ページの内容を表示させるための最も基本的なループ PHP です。
php if が開始コードで php endwhile がループ終了コード。
利用例
1 2 3 4 5 |
<?php if(have_posts()): while(have_posts()): the_post(); ?> <?php the_content(); ?> <?php endwhile; endif; ?> |
や
1 2 3 4 5 6 7 8 9 |
<?php if(have_posts()): while(have_posts()): the_post(); ?> <?php the_content(); ?> <?php endwhile; ?> <?php else : ?> <p>現在記事はありません。</p> <?php endif; ?> |
こんな風に中に php the content を挟むと、投稿の本文が表示されます。他にも日付やタイトルスニペットを挟めば応じたものが表示されます。
表示数を指定できるループ
1 2 3 4 5 6 7 8 9 |
<?php $lastposts = get_posts('numberposts=5'); foreach($lastposts as $post) : setup_postdata($post); ?> //ここに内容 <?php endforeach; ?> |
投稿を表示できる数を指定できるループです。管理画面の設定で指定してある投稿表示数よりもこちらが優先されます。
numberpost の部分の数字が投稿表示数です。
投稿をに一覧表示していき、とにかく新しいものから順番に表示します。カテゴリー分けやカスタム投稿には非対応です。
利用例
1 2 3 4 5 6 7 8 9 10 11 |
<ul> <?php $lastposts = get_posts('numberposts=5'); foreach($lastposts as $post) : setup_postdata($post); ?> <li> <?php the_time('Y年m月d日'); ?> | <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a> </li> <?php endforeach; ?> </ul> |
こんな感じで、ul タグの内側に挟んで、新着一覧として li をループさせたりに使います。もちろん dl に挟んで、dt, dl に使ったり、table に挟んで利用しても良いです。
カテゴリー別に指定するループ
1 2 3 4 5 6 |
<?php $posts = get_posts('numberposts=5&cat=1'); global $post;?> <?php foreach($posts as $post): ?> //ここに内容 <?php endforeach; ?> |
カテゴリー毎の新着一覧などを作りたいときにはこのループ。表示数指定も OK。
numberposts で表示数を指定、cat= の数字部分に表示させたいカテゴリー ID の番号を指定すれば、そのカテゴリーだけが表示される一覧にできます。
利用例
1 2 3 4 5 6 7 |
<dl> <?php $posts = get_posts('numberposts=5&cat=1'); global $post;?> <?php foreach($posts as $post): ?> <dt><?php the_time('Y年m月d日'); ?></dt> <dd class="boxclick"><a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></dd> <?php endforeach; ?> </dl> |
こんな風に親タグに挟まれるかたちで使います。
1 |
<?php $posts = get_posts('numberposts=5&cat=1,3,5'); global $post;?> |
このように cat= をカンマで切って複数カテゴリー ID を記述すれば、複数のカテゴリー指定も可能です。
特定のカテゴリーを表示させないようにするループ
1 2 3 4 5 6 7 8 |
<?php query_posts('cat=-3,-4,-5,-6,-7&posts_per_page=5&paged='.$paged); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> //ここに内容 <?php endwhile; ?> <?php endif; ?> |
上の「カテゴリー別に指定するループ」とは逆に「指定したカテゴリーだけ表示させる一覧から抜く」ためのループです。
cat= の後に抜きたいカテゴリー ID をマイナス付けて記述します。複数抜きたいときには、カンマで切って、それぞれカテゴリー ID を記述していきます。
細かいことが指定できるループ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php query_posts( Array( 'post_type' => 'post', 'posts_per_page' => '999', 'orderby' => 'date', 'order' => 'DESC' ) ); if (have_posts()) : while (have_posts()) : the_post(); ?> //ここに内容 <?php endwhile; endif; wp_reset_query(); ?> |
post type の post は「投稿」を表示し、page なら「固定ページ」、カスタム投稿名(news 等)を記述すれば、その一覧が表示されます。
posts per page の数字は、一覧の表示数。
orderby は「date」なら日付順、name なら名前順に並びます。
order は「DESC」なら降順、「ASC」なら昇順に一覧が並びます。
orderby と order で一覧の並びを細かく制御することが可能です。
とりあえず、ループの種類はちょこちょこ追記します。