WordPressの記事一覧は、デフォルトでは「投稿日(公開日)順」に並んでいます。
過去記事のリライトに力を入れているブログの場合、最新の情報を読者に届けやすくするために「更新日時(最終更新日)順」へ変更するのが最新状況が分かりやすくて効果的ですね。
- 方法: テーマの
functions.phpに数行のコードを追記するだけ。 - メリット: プラグイン不要でサイトが重くならない。
- ポイント: 全ページ一括だけでなく「ホームだけ」といった条件分岐も可能。
まずは、サイト全体の記事一覧(メインクエリ)を更新日時順にする基本のコードを紹介します。以下のコードを functions.php の末尾に追記してください。
// 記事一覧を更新日時順に変更
function my_sort_order_by_modified( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
$query->set( 'orderby', 'modified' );
$query->set( 'order', 'DESC' );
}
}
add_action( 'pre_get_posts', 'my_sort_order_by_modified' );
この記事では、このコードの具体的な使い方や、特定のページ(ホームやカテゴリ)だけに適用するカスタマイズ方法を詳しく解説します。
関連)
管理画面の記事一覧に「更新日」の列を追加する方法はこちら
更新日時順にする方法
実際、上のコードを functions.php に追記してみます。
以下のCocoonの例ですが、
①「外観」⇒②「テーマファイルエディタ」⇒③「テーマのための関数」を選び、functions.phpの最後に追記します。

最後に ⑤「ファイルを更新」で保存。
ワードプレスの記事の一覧表示を記事を修正した「更新日」の順で表示するには、以下のコードを「テーマのための関数」(functons.php)に追加するだけ。
実際の動作を確認してみましょう。
実際の動作
上で見たコードを「テーマのための関数」に追加すると、以下のような表示になります。
(分かりやすいように記事のタイトルに投稿日を入れている)

元々公開日順で記事の一覧が表示されていたところ(左)、更新日順の一覧に変わっているのが分かりますね(右)。
コードの簡単説明
コードをこうしたい、と少しカスタマイズしたい場合もあると思いますので、上で見たコードはどうなっているか、ざっくり見ておきましょう。
- ①「! is_admin()」
- 「管理画面以外(サイトの表示側)の場合なら」、という意味
- ②「$query->is_main_query()」
- 「メインの記事一覧を要求している場合なら」という意味
- ここで「メイン」というのは、サイドバーやフッターにある『人気記事一覧』や『新着一覧』ではなく、記事表示部分での『記事一覧(投稿の一覧)』ということ
- ③「$query->set( 'orderby', 'modified' )」
- 「並び順(orderby)を更新日(modified)にしてね」という意味
- ④「$query->set( 'order', 'DESC' )」
- 「新しい順(DESC)で並べてね」という意味
③と④をセットにすることで、
「更新日が新しい順に並べる」という命令になります。
データベースに対し、
- 管理画面以外で記事一覧の要求では、
- ”更新順で頂戴”!
という形になりますね。
上で見たコードでは、特定の場所の「記事一覧」ではないことから、
- 「ホームの記事一覧」
- 「カテゴリページの記事一覧」
- 「月日別のページの記事一覧」
- 「タグページの記事一覧」
- ・・・・
などなど、全ての記事一覧で更新日順に変わる、となります。
「いや、こうした場合は除外したい」などでは、①の「is_main_query()」を「ホームだけにする」など条件を変えればOK。
条件を変えたい場合
全てのページを対象とするのではなく、
「ホームだけ」や「特定のページだけ」更新日順にしたい場合は、条件分岐(ifの部分)を書き換えます。
この時、管理画面の記事一覧は更新日順に変更したくない場合は、「! is_admin()(管理画面ではない場合)」という条件は残しておくのがポイント。
以下は、「ホーム」または「カテゴリーページ」を更新順にする場合の例。
// 1)ホーム(トップページ)だけ更新順にする場合
if ( ! is_admin() && $query->is_main_query() && $query->is_home() )
// 2)ホームまたはカテゴリーページを更新順にする場合
if ( ! is_admin() && $query->is_main_query() && ( $query->is_home() || $query->is_category() ) )
※「||」は「または」という意味
この例では、以下となってます。
- (サイドバーではなく)メインであり、かつ、ホームまたはカテゴリーページの場合
となってます。
逆に、「カテゴリーページだけ」は公開日順のままにしたい(更新順から除外したい)という場合は、以下のように「!(〜ではない)」を使って書きます。
// 1)カテゴリーページは除く(それ以外を更新順に)
if ( ! is_admin() && $query->is_main_query() && ! $query->is_category() )
// 2)日付別ページは除く(それ以外を更新順に)
if ( ! is_admin() && $query->is_main_query() && ! $query->is_date() )
※「&&」は「かつ」、「!」は「〜ではない」という意味
ここで使っている $query->is_home() や $query->is_category() は、特定のページかどうかを判定する「条件分岐タグ」のメソッド。
※ カスタマイズがおすすめな理由:
記事の並び替えプラグインは直感的ですが、記事数が増えるほどデータベースへの負荷が高まり、表示速度を低下させる原因にもなる。そこで今回のように functions.php で制御する方法はデータベースへの負荷を避けることにもなり、SEOの重要指標である「ページ表示速度」を維持できる最もクリーンな手法となる。
なお、条件分岐タグの全種類を詳しく知りたい方は、公式の「条件分岐タグ – WordPress Codex 日本語版」を参照してください。
微修正でトップに来るのを防ぐには?
今回のように、記事一覧を更新日時順にすると、「誤字脱字を1文字直しただけ」の記事まで先頭に浮上します。
運営者視点で、それでもOKならそのままですが、読者にとって価値が変わらない微修正で順位が入れ替わるのは、あまり好ましくない、という考え方もありますね。
こうしたことを考えると、
記事を更新する際に「更新日を変更するかどうか」を選択できる仕組みも入れていくのが良いと思います。
- プラグインを利用する:
「WP Last Modified Info」等で更新日の保持を選択可能にする。 - カスタムフィールドを活用する:
更新日を更新しないチェックボックスを自作する。
この対応はまた別記事で見て行きましょう。
今回のポイント
WordPressの記事一覧を「更新順」に変更するポイントは以下の通り。
- 基本のカスタマイズ:
functions.phpに数行追加するだけで、プラグインなしで更新順に変更可能。 - 柔軟な制御: 条件分岐(
is_home()など)を使えば、特定のページだけ適用することもできる。 - シンプルさを求めるなら: 今回紹介したコードによるカスタマイズが最も軽量
- 確実性と利便性を求めるなら: 今回のコードが今一機能しない場合、「WP Last Modified Info」などのプラグイン導入を検討
大切なのは「読者にとって新鮮で有益な情報をトップに届ける」という視点。
ご自身のブログの更新スタイルに合わせて、最適な方法を取り入れてみてくださいね!
またネットで収益化を目指したい!ブログで収益化をしたいがやり方が分からない、という場合には、以下のメルマガにも登録してみてください。


コメント