Wordpressの投稿(記事)一覧を古い順に並べ替える方法です。
デフォルトではトップページやカテゴリーページの記事は新着順に表示されますが、サイトによっては古い記事から順番に表示したいという事があります。
この表示順は残念ながら管理画面からは変更できませんが、functions.phpを使えば簡単なコードで古い順に変更することができます。
プラグインもありますが、この操作はfucntions.phpを使う方がお勧めです。
投稿(記事)一覧を古い順に並べ替える
Wordpressの投稿一覧は新着順(日付順)というのが標準の仕様です。
テーマによっては表示順を並べ替えることが出来るものもありますが、管理画面からトップページやカテゴリーページの表示順を変更することは出来ません。
この表示順を古い順に変更するにはプラグインを使う方法とfunctions.phpを使う方法がありますが、Wordpressにはpre_get_posts
という便利なフックがありますので、こちらを使えばorderやorderbyを使って簡単に並べ替えることが出来ます。
プラグインは使い勝手がイマイチということもありますが、メインクエリを操作するものなので出来るだけfunctions.phpを使うようにしましょう。
関連記事
初心者の方はこちらを参考にどうぞ!
WordPressのfunctions.phpとは?場所と編集方法、コードの書き方を初心者向けに解説します。
では早速コードのご紹介!動作については後回しにします。
functions.phpに追記するコード
表示順を古い順(日付)に変更するコードがこちらです。
子テーマなどのfunctions.phpに以下のコードを追記すればOKです。
//記事を古い順に並べ替える function sortpost_old($query) { if(is_admin() || !$query->is_main_query()){ return; } $query->set('order', 'ASC'); } add_action('pre_get_posts', 'sortpost_old');
この手の記事はコードが分かればよいと思いますが、簡単に解説します。
まず、if文ですがこれは「管理画面またはメインクエリ以外の時は何もしない」という記述です。なくても一応動きますがややこしくなるので書いた方が良いです。
その下の$query->set('order', 'ASC');
の部分で投稿を古い順に変更しています。
Wordpressの場合はorderの初期値にDESC(降順)が入っているので、投稿日の降順という事で"新着順"に表示されるようになっています。
また、orderbyの初期値はdateなので指定し直す必要はありません。
~WordPressのデフォルト指定は以下のイメージ~ //ASC:昇順、DESC:降順 $query->set('order', 'DESC'); //orderbyで何順に並べ替えるか指定 $query->set('orderby', 'date');
文章にするとややこしいですが、Wordpressのデフォルト指定はコードにすると上記のような感じだと言えます。これをASC(昇順)に変更すれば古い順にできます。
必要に応じてis_category()などで条件分岐を付ければ、カテゴリーページだけ記事を古い順に並べ替えたりすることもできます。
コードの動作について
functions.phpにコードを追記したら動作確認です。
まず管理画面から…
if文で管理画面の時は何もしないという条件分岐を付けているので、管理画面の投稿は今まで通り新着順で表示されます。
そして記事一覧ページは日付が古い記事から順番に表示されるようになります。
テストサイトなのでWordpressのインストール時に始めからあり一番古い投稿であるHello Worldが先頭に来ていました・w・
pre_get_posts
はほとんどのテーマで動作すると思いますが、もしかしたら意図した動作にならないテーマもあるかもしれません…
原因は無数にあるので難しいですが、new WP_Query
を使っても同じようなことが出来るので、ダメな方はそちらも調べていただければと思います。
まとめ
functions.phpを使ってWordpressの投稿を古い順に変更する方法でした。
記事の並び替えで代表的なプラグインには「Intuitive Custom Post Order」というものがありますが、ドラッグ&ドロップで並べ替えるものなので一括で変更したい時は使いにくいです。
プラグインが増えるとセキュリティ、サイト速度、メンテナンス性…と色々良くないので、表示順の変更程度ならfunctions.phpを使いましょう!