テーマ内などで最新記事を取得する方法。
query_postsを使って表示数を制限して表示させています。
トップページとかカテゴリーページなどのメインループを表示する場合、表示件数を変えるだけならquery_postsで変更するのではなく「管理画面」→「設定」→「表示設定」の「1ページに表示する最大投稿数」を変えた方がなんとなく早そう。
サイドバーとかでも使えるのだけど、その場合は「get_posts」を使った方がいいかもです。。。
使いどころが分からなくなってきたところで、一応のゴールはカテゴリー名を取得してリンク付表示、タイトルは文字数で分岐、一定以上で「…」で省略。
まずは簡単な記述。
1 2 3 4 5 6 7 8 |
<ul> <?php query_posts('posts_per_page=5'); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li> <?php endwhile; else: ?> <li>まだ記事はありません</li> <?php endif; wp_reset_query(); ?> </ul> |
基本的なループに、query_postsを利用して取得数を指定します。posts_per_page=5
のところで取得数を5件に変更しています。
最後に「wp_reset_query();」で初期設定に戻しておきます。
次はカテゴリーを取得してリンク付表示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<ul> <?php query_posts('posts_per_page=5'); if ( have_posts() ) : while ( have_posts() ) : the_post(); $cat_info = get_the_category(); //カテゴリー情報を取得(「$cat_info」に格納) $cat_name = $cat_info[0] -> cat_name; //カテゴリー名を「$cat_name」に代入 $cat_id = $cat_info[0] -> category_nicename; //カテゴリースラッグを「$cat_id」に代入 ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> <a href="<?php bloginfo('url'); ?>/<?php echo $cat_id; ?>" title="<?php echo $cat_name; ?>"><?php echo $cat_name; ?></a> </li> <?php endwhile; else: ?> <li>まだ記事はありません</li> <?php endif; wp_reset_query(); ?> </ul> |
リンクはパーマリンク設定に合わせる必要があります。
この場合だと「http://ドメイン/カテゴリースラッグ」にリンクします。
また、記事のカテゴリーが格納された配列の[0]しか表示されないので、全部表示させたい場合はforeachして表示する必要が出てくるかと思います。
というかwp_list_categoriesを使えばいいじゃないかとも思いますが、取得してforeachした方が応用は利きそうです。速度とか考えてませんが、分岐させたりとか出来そうだし。
取り合えず一個だけ表示させます。
最後にタイトルを文字数で分岐し、多い場合は末尾に「…」を入れて省略、少ない場合はそのまま表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<ul> <?php query_posts('posts_per_page=5'); if ( have_posts() ) : while ( have_posts() ) : the_post(); $cat_info = get_the_category(); $cat_name = $cat_info[0] -> cat_name; $cat_id = $cat_info[0] -> category_nicename; $Title_Cnt = mb_strlen($post-> post_title); //タイトルの文字数を「$Title_Cnt」に代入 ?> <li><a class="Title" href="<?php the_permalink(); ?>/" title="<?php the_title(); ?>"> <?php // 「$Title_Cnt」が15文字より多いか少ないかで表示を変えます。 if($Title_Cnt > 15): echo mb_substr(strip_tags($post-> post_title), 0, 15); echo '...'; else : the_title(); endif; ?></a> <span class="Info"><?php the_time('Y年m月d日'); ?> <a href="<?php bloginfo('url'); ?>/<?php echo $cat_id; ?>" title="<?php echo $cat_name; ?>"><?php echo $cat_name; ?></a></span> </li> <?php endwhile; else: ?> <li>まだ記事はありません</li> <?php endif; wp_reset_query(); ?> </ul> |
コメントを残す