記事の表示順、表示数を変更する
目次
1. 表示する記事の数や種類を変更する
今回は、トップページに表示する記事の数や種類を変更してみます。具体的には、「投稿」と「カスタム投稿(websites)」のうち、更新日時が新しい順に3つ表示します。
2. テーマをカスタマイズする
まず、カスタマイズする前の状態でサイト実行してみます。カスタマイズ前は、次のように表示されます。
- 1ページに表示される最大記事数:ダッシュボードでの設定値に依存
- 表示される記事の種類:投稿
- 表示順:投稿(公開)日時が新しい順
サンプルコード
前回までに作成したテーマから、「投稿日表示のバグ回避」「最終更新日の表示」と「カスタム投稿のアイキャッチ画像」を変更or追加しています。念のため、今回のカスタマイズ前のソースコードをこちらに掲載します。
ここをスタート地点として、次の手順でトップページに表示する記事を変更します。
- 記事数を変更する
- カスタム投稿も表示する
- 更新日時が新しい順に表示する
記事数を変更する
1ページに表示する最大記事数は、通常ダッシュボードの設定値に依存します。
※確認方法
ダッシュボード>設定>表示設定>1ページに表示する最大投稿数
インストール時は、10に設定されています(ver.3.6時点)。今、仮に1ページに表示する最大投稿数を1に設定してトップページにアクセスすると、次のようになります。
補足:
なお、この状態でカテゴリーページやタグページなどを開いた場合も、表示される最大投稿数は1件になります。
次にindex.phpを編集して、表示する投稿数を3に変更してみます。
index.php
<?php get_header(); ?> <div id="content"> <div id="breadcrumb"> <?php get_template_part('breadcrumb'); ?> </div> <?php // トップページ表示の場合のみ、query_posts()を実行 if (is_home()) { query_posts(array(posts_per_page => 3)); } while(have_posts()) { the_post(); get_template_part('content'); if (is_singular('post')) { comments_template(); } } ?> </div> <?php get_sidebar(); get_footer();
ここでは、次の8〜10行目を挿入しました。
if (is_home()) { query_posts(array(posts_per_page => 3)); }
query_posts()は、クエリを再作成するWordPress関数です。クエリ(要求)とは、データベースから引っ張ってくる記事リストのようなものです。query_posts()は、その引数によって再作成するクエリをカスタマイズすることができます。
補足:クエリ(Query)の直訳は「問い合わせ」で、特定の情報をデータベースに要求すること、およびその内容をクエリと言います。
実用上の言葉で言い換えれば、query_posts()関数によって、「どのような記事を、どんな順番で、1ページ最大いくつ表示するか」を変えることができます。ここでは、1ページに表示する最大投稿数を3にしたいので、”posts_per_page”を3に指定しました。サイト実行すると、表示件数の指定が反映されたのを確認できました。
なお、引数は次のような書き方でもOKです。WPコア内の処理中(wp_parse_args()関数)で、配列に展開されます。
query_posts(array('posts_per_page=3'));
カスタム投稿も表示する
トップページに表示する記事の種類に、カスタム投稿も追加します。query_posts()の引数を次のようにすればOKです。
query_posts(array(posts_per_page => 3, post_type => array(websites, post)));
表示する記事の種類は、post_typeで指定します。配列にすると、複数の種類を指定できます。
記事の種類 | post_typeの値 |
---|---|
投稿 | post |
固定ページ | page |
カスタム投稿 | register_post_type()の第一引数 |
サイト実行すると、投稿とカスタム投稿と両方が表示され、かつ、投稿日が新しい順に3件表示されました。
更新日時が新しい順に表示する
投稿日時ではなく、更新日時が新しい順番で表示されるように変更します。
query_posts(array( 'posts_per_page' => 3, 'post_type' => array('websites', 'post'), 'orderby'=>'modified', 'order'=>'DESC'));
orderbyで何の順番にするかを指定し、orderで昇順(ASC)or降順(DESC)を指定します。orderbyは更新日時順(modified)のほか、タイトル順(title)、記事ID順(ID)、ランダム(rand)などを指定できます。
参考:ココ(Codex)に、orderbyで指定できる値一覧がリストアップされています。
動作を確認するためにサイトを実行すると、更新日時順に並べ替えられました。
今回のカスタマイズは以上で終わりです。
関連記事
WordPress Codex
「index.phpをカスタマイズする」の記事
- 第20回 ギャラリー表示をカスタマイズする
- 第19回 ページ送りを設置する
- 第18回 カテゴリやタグを表示する
- 第17回 記事の表示順、表示数を変更する – 補足
- 第16回 記事の表示順、表示数を変更する << この記事です
- 第15回 アイキャッチ画像を表示する
- 第14回 抜粋を表示する
- 第13回 パンくずリストを設置する
- 第12回 ページの種類で分岐処理する
- 第11回 カスタム投稿タイプを作成する
- 第10回 カスタム背景を設置する
- 第9回 カスタムヘッダーを設置する
- 第8回 カスタムメニューを設置する
- 第7回 コメントフォームをカスタマイズする
- 第6回 コメントフォームを設置する
- 第5回 サイドバーを設置する
- 第4回 functions.phpとは
- 第3回 テンプレートフォルダ内の画像を使用する
- 第2回 テンプレートパーツ化する
- 第1回 HTMLからWPテーマを作成する