目次

  1. 表示する記事の数や種類を変更する
  2. テーマをカスタマイズする
    1. 記事数を変更する
    2. カスタム投稿も表示する
    3. 更新日時が新しい順に表示する

 

 

1. 表示する記事の数や種類を変更する

今回は、トップページに表示する記事の数や種類を変更してみます。具体的には、「投稿」と「カスタム投稿(websites)」のうち、更新日時が新しい順に3つ表示します。

クエリ変更_step4

 

2. テーマをカスタマイズする

まず、カスタマイズする前の状態でサイト実行してみます。カスタマイズ前は、次のように表示されます。

  • 1ページに表示される最大記事数:ダッシュボードでの設定値に依存
  • 表示される記事の種類:投稿
  • 表示順:投稿(公開)日時が新しい順

クエリ変更_step0

 

サンプルコード
前回までに作成したテーマから、「投稿日表示のバグ回避」「最終更新日の表示」と「カスタム投稿のアイキャッチ画像」を変更or追加しています。念のため、今回のカスタマイズ前のソースコードをこちらに掲載します。

ここをスタート地点として、次の手順でトップページに表示する記事を変更します。

  1. 記事数を変更する
  2. カスタム投稿も表示する
  3. 更新日時が新しい順に表示する

 

記事数を変更する

1ページに表示する最大記事数は、通常ダッシュボードの設定値に依存します。

※確認方法
ダッシュボード>設定>表示設定>1ページに表示する最大投稿数

インストール時は、10に設定されています(ver.3.6時点)。今、仮に1ページに表示する最大投稿数を1に設定してトップページにアクセスすると、次のようになります。

クエリ変更_step1

 

補足:
なお、この状態でカテゴリーページやタグページなどを開いた場合も、表示される最大投稿数は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に指定しました。サイト実行すると、表示件数の指定が反映されたのを確認できました。

クエリ変更_step2

なお、引数は次のような書き方でも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件表示されました。

クエリ変更_step3

 

更新日時が新しい順に表示する

投稿日時ではなく、更新日時が新しい順番で表示されるように変更します。

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で指定できる値一覧がリストアップされています。

動作を確認するためにサイトを実行すると、更新日時順に並べ替えられました。

クエリ変更_step4

 

今回のカスタマイズは以上で終わりです。

 


関連記事

WordPress Codex

 

「index.phpをカスタマイズする」の記事