新しい順・古い順はorderbyとorderで決める
WordPressの記事を新しい順にするには、orderbyをdate、orderをDESCにします。古い順ならorderをASCへ変えます。orderbyが何を基準にするか、orderがどちら向きに並べるかを決めます。
orderbyは、何を基準に並べるかを選ぶ指定です。投稿日ならdate、タイトルならtitle、更新日ならmodifiedを使います。カスタムフィールドの値を基準にする場合は、meta_keyと値の型も指定します。
新しい順・古い順にする方法
WP_Queryで並び順を変えたいとき、まず混乱しやすいのが orderby と order の名前です。どちらも「並び順」に関係するため、最初は同じように見えます。
ただし、役割ははっきり分かれています。orderby は並べ替えの基準を決めます。order はその基準に対して、上から下へどう並べるかを決めます。たとえば「投稿日を基準に、新しい順で並べる」なら、基準は date、向きは DESC です。
| 指定 | 役割 | 例 |
|---|---|---|
| orderby | 何を基準に並べるか | date、title、modified、menu_order、meta_value_num など |
| order | 昇順か降順か | ASC、DESC |
コードを読むときは、まずorderbyを見て「何を基準に並べるか」を確認します。次にorderを見て、「その基準をどちら向きに並べるか」を確認すると理解しやすくなります。
WP_Queryの組み立て方から確認したい場合は、WP_Queryの基本構文と$argsの書き方を先に読むと、$argsとループ全体の流れを確認できます。
DESCが常に「新しい順」になるわけではありません。指定した基準の大きい側から並べるため、dateなら新しい順、数値なら大きい順、titleなら文字列の降順です。まずは日付順の最小例で見る
最初に覚えるなら、投稿日で並べる例が一番分かりやすいです。WordPressの記事一覧でよくある「新しい順」「古い順」は、orderby に date を指定し、order で向きを変えます。
次のコードは、通常投稿を投稿日が新しい順に3件取得する例です。検証環境で投稿日と表示順を照合してください。
クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。
$args = [ 'post_type' => 'post', 'posts_per_page' => 3, 'orderby' => 'date', 'order' => 'DESC',]; $latest_posts = new WP_Query( $args ); if ( $latest_posts->have_posts() ) { echo '<ul>'; while ( $latest_posts->have_posts() ) { $latest_posts->the_post(); echo '<li><a href="' . esc_url( get_permalink() ) . '">'; echo esc_html( get_the_title() ); echo '</a></li>'; } echo '</ul>';} wp_reset_postdata();このコードの読みどころは、orderby と order を1行ずつ分けて読むことです。orderby が date なので、投稿日を基準にしています。order が DESC なので、新しい投稿から古い投稿へ並びます。
通常投稿以外を並べる場合は、post_typeを対象に合わせます。WP_Queryのpost_type指定方法では、post、page、カスタム投稿タイプの違いを確認できます。
最後にwp_reset_postdata()を置いているのは、the_post()を使った後にメインクエリの現在の投稿データへ戻すためです。並び順そのものとは別ですが、後続のタイトルやURLが別投稿を参照するのを防ぎます。
ASCとDESCはどう読むか
order に指定する代表的な値は ASC と DESC です。ASC は ascending の略で、昇順を意味します。DESC は descending の略で、降順を意味します。
ただし、初心者が迷いやすいのは「投稿日でASCにしたらどうなるのか」「タイトルでDESCにしたらどうなるのか」という部分です。昇順・降順は、基準によって見え方が変わります。
| 基準 | ASCの見え方 | DESCの見え方 |
|---|---|---|
| date | 古い記事から新しい記事へ | 新しい記事から古い記事へ |
| title | DBの照合順序による文字列の昇順 | DBの照合順序による文字列の降順 |
| ID | 小さいIDから大きいIDへ | 大きいIDから小さいIDへ |
| comment_count | コメントが少ない順 | コメントが多い順 |
つまり、ASC と DESC は単に「上」「下」というより、指定した基準に対して小さい側から見るか、大きい側から見るかの違いです。日付なら古いか新しいか、数値なら小さいか大きいか、文字列なら文字順の向きとして考えます。
よく使うorderbyの指定
orderby には多くの値がありますが、最初から全部覚える必要はありません。よく使うものだけ先に押さえ、必要になったら公式リファレンスで確認する方が現実的です。
一般的な記事一覧でよく使うのは、date、modified、title、menu_order、rand、comment_countです。modifiedは軽微な保存でも変わり、comment_countはコメント数であって人気そのものを表す指標ではありません。menu_orderは各投稿へ値が設定されていることが前提で、未設定の多くは0です。
| orderbyの値 | 並び替えの基準 | よくある用途 |
|---|---|---|
| date | 投稿日 | 新着記事一覧を作る |
| modified | 更新日 | 最近更新した記事を表示する |
| title | タイトル | 記事名順に並べる |
| menu_order | メニュー順 | 固定ページや手動順の表示に使う |
| rand | ランダム | ランダムに1件出す |
| comment_count | コメント数 | コメントが多い記事を出す |
| meta_value_num | 数値のカスタムフィールド | 価格、年齢、順位などの数値順に並べる |
randではorderを省略します。また、指定配列の順序を保つpost__in、post_name__in、post_parent__inでも、orderを通常のASC / DESCとして使って順序を反転するものではありません。すべてのorderbyに同じようにorderが効くわけではありません。
タイトル順に並べる例
タイトル順は、日付順の次に試しやすい例です。見た目で結果を確認しやすく、ASC と DESC の違いも比較しやすいからです。
次のコードは、通常投稿をタイトルの昇順で3件取得する例です。日本語タイトルの場合、期待した読み仮名順になるとは限らないため、まずは英数字や分かりやすいタイトルを持つテスト投稿で確認すると判断しやすくなります。
クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。
$args = [ 'post_type' => 'post', 'posts_per_page' => 3, 'orderby' => 'title', 'order' => 'ASC',]; $title_posts = new WP_Query( $args ); if ( $title_posts->have_posts() ) { echo '<ul>'; while ( $title_posts->have_posts() ) { $title_posts->the_post(); echo '<li><a href="' . esc_url( get_permalink() ) . '">'; echo esc_html( get_the_title() ); echo '</a></li>'; } echo '</ul>';} wp_reset_postdata();このコードでは、orderby が title なのでタイトルを基準にしています。order が ASC なので、昇順で並びます。DESC に変えると、同じタイトル基準のまま、向きだけが変わります。
並び順は、orderbyを変える時はorderを固定し、orderを変える時はorderbyを固定して確認します。1つずつ変えれば、結果が変わった理由を追えます。
同じ投稿日を持つ投稿の順序も固定したい場合は、第二基準を加えます。次の差分では投稿日が同じときにIDの大きい投稿を先にします。ID順は投稿日順の代用ではなく、同値を安定させる補助です。
引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。
$args = [ 'post_type' => 'post', 'posts_per_page' => 3, 'orderby' => [ 'date' => 'DESC', 'ID' => 'DESC', ],];カスタムフィールド順ではmeta_keyと型に注意する
orderby に meta_value や meta_value_num を指定すると、カスタムフィールドの値を基準に並べることができます。たとえば価格、開催日、スコア、優先度のような値で並べたいときに使います。
ただし、ここは初心者がつまずきやすい場所です。meta_valueやmeta_value_numを使う場合はmeta_keyが必要です。meta_valueは文字列順、meta_value_numは数値順として使い分け、必要に応じてmeta_typeも検討します。対象のメタキーが未保存の投稿は結果から外れる場合があります。
orderby=meta_value_numが効かない場合は、meta_key、保存値、meta_typeの順に確認すると、指定とデータの問題を切り分けやすくなります。
dateやtitleでorderbyとorderを確認してからカスタムフィールド順へ進むと、並び順、保存値、型の問題を分けて調べられます。
よくある勘違い
日付順だけが合わない場合は、date、modified、カスタムフィールドの日付値のどれを基準にしているかと、ASC / DESCの組み合わせを確認してください。
表示のたびに順番を変えたい場合は、orderby=randの負荷とキャッシュへの影響も確認します。
orderだけを変えても、基準であるorderbyが違えば期待した順番にはなりません。また、orderbyへ自由な項目名は書けません。カスタムフィールドで並べる場合は、meta_key、meta_valueまたはmeta_value_num、保存値の型を組み合わせて確認します。
公式資料で確認するポイント
orderbyは指定できる値が多く、カスタムフィールドや複数条件の並び替えに進むほど確認する項目が増えます。必要な場面で公式リファレンスのOrder & Orderby Parametersを開き、使用できる値と前提条件を照合してください。
WP_Queryでthe_post()を使う一覧では、並び順とは別に、ループ後のwp_reset_postdata()も確認します。
公式リンク
公式ドキュメント
orderbyは基準、orderは向きで考える
WP_Queryの並び順は、orderby と order を分けて読むと理解しやすくなります。orderby は「投稿日で並べるのか、タイトルで並べるのか、更新日で並べるのか」という基準を決めます。order は、その基準に対して昇順か降順かを決めます。
最初は date と title だけで十分です。新しい順、古い順、タイトル昇順、タイトル降順を小さい件数で試せば、orderby と order の関係が見えてきます。カスタムフィールド順や複数条件の並び替えは、その後で少しずつ確認すると結果の変化を追いやすくなります。
並び順を決める前の確認
- 並べ替えの基準をorderbyで選んだ
- 基準に対する向きをorderで選んだ
- 同値がある場合の第二基準を決めた
- randやpost__inなどorderを通常利用しない例外を確認した
- meta_valueまたはmeta_value_numではmeta_keyと保存値を確認した
この記事の検証情報
検証環境
- WordPress
- 7.1
- PHP
- 8.3.33
- テーマ
- wpq-media + DDEV
- 対象
- カスタム投稿 / taxonomy / meta_query
更新履歴
- 2026年8月24日 本文と補助情報を更新
- 2026年8月21日 初回公開
この記事を活用する
あとで見返す・共有する
お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。


