【WordPress】記事のソート順を変更する方法

WordPressのデフォルトでは記事は公開日の降順で表示されますが、カスタマイズすることで並び順を自由に変更できます。本記事では、WordPressで記事のソート順を変更する方法をいくつか紹介します。

スポンサーリンク

WP_Queryを使ってソート順を変更する

WP_Queryを使用すると、特定の条件で記事を並び替えることができます。

例: 発行日を降順でソートする

公開日の降順でソート
$args = array(
  'post_type'      => 'post',
  'posts_per_page' => 10,
  'orderby'        => 'date',
  'order'          => 'DESC' // 昇順にする場合は'ASC'
);

$the_query = new WP_Query($args);

if ($the_query->have_posts()) :
  while ($the_query->have_posts()) : $the_query->the_post();
    the_title('<h2><a href="' . esc_url(get_permalink()) . '">', '</a></h2>');
  endwhile;
  wp_reset_postdata();
else :
  echo '投稿が見つかりませんでした。';
endif;

この方法は特定のページやカスタム投稿タイプに適用するのに適しています。

pre_get_postsを使ってメインクエリのソート順を変更する

pre_get_postsフィルターを利用すると、メインの投稿一覧の並び順を変更できます。

例: アーカイブページでタイトルの昇順にする

アーカイブページのソート順を変更
function custom_sort_posts_by_title($query) {
  if (!is_admin() && $query->is_main_query() && is_archive()) {
    $query->set('orderby', 'title');
    $query->set('order', 'ASC');
  }
}
add_action('pre_get_posts', 'custom_sort_posts_by_title');

この方法を使うと、サイト全体の特定のページ(例: アーカイブページ)で記事のソート順を統一できます。

カスタムフィールドを使って並び替える

Advanced Custom Fields(ACF)などを使って、カスタムフィールドに基づいたソートができます。

例: カスタムフィールド「price」(価格)でソート

NG:meta_valueは文字列としてソートされる
$args = array(
  'post_type'      => 'post',
  'posts_per_page' => 10,
  'meta_key'       => 'price',
  'orderby'        => 'meta_value', // 文字列として比較される
  'order'          => 'ASC'
);

$the_query = new WP_Query($args);
// price = 9, 10, 100 の場合、文字列比較で 10 -> 100 -> 9 の順になってしまう
数値データはmeta_value_numでソートする
orderby => 'meta_value'は、カスタムフィールドの値を文字列として比較します。価格のような数値データの場合、910100が文字列の辞書順で10 → 100 → 9のように誤った順序になってしまいます。数値を正しく昇順・降順に並べるにはorderby => 'meta_value_num'を使う必要があります。
OK:meta_value_numで数値として正しくソート
$args = array(
  'post_type'      => 'post',
  'posts_per_page' => 10,
  'meta_key'       => 'price',
  'orderby'        => 'meta_value_num', // 数値として比較される
  'order'          => 'ASC'
);

$the_query = new WP_Query($args);
// price = 9, 10, 100 の場合、正しく 9 -> 10 -> 100 の順になる

この方法は、価格や評価などのカスタムデータに基づいた並び替えをしたい場合に役立ちます。

プラグインを使って簡単に並び替え

コーディング不要で記事の並び順を管理したい場合は、以下のプラグインを使用すると便利です。

  • Post Types Order(ドラッグ&ドロップで並び替え)
  • Simple Custom Post Order(カスタム投稿タイプの並び順変更)

これらのプラグインを使用すると、直感的な操作で記事の順番を変更できます。プラグインを増やしたくない場合は、後述の関連記事のようにmenu_orderとドラッグ&ドロップ操作を自前で実装する方法もあります。

関連記事

よくある質問(FAQ)

Qメインループの記事ソート順を変更するには?
Apre_get_postsフックで$query->set('orderby', 'meta_value')$query->set('order', 'ASC')を設定します。is_main_query()is_home()等の条件と組み合わせてメインループのみに適用します。
QWP_Queryで使用できるorderbyパラメーターにはどんな種類がありますか?
Adate(日付)・title(タイトル)・modified(更新日)・menu_order(メニュー順)・rand(ランダム)・meta_value(カスタムフィールドを文字列として)・meta_value_num(カスタムフィールドを数値として)・comment_count(コメント数)などが使えます。数値データをソートするときはmeta_value_numを使うのがポイントです。
Qランダム表示で同じ記事が繰り返し表示されないようにするには?
Aorderby=randはリクエストごとに変わります。セッションやCookieに表示済みIDを保存し、post__not_inで除外する方法があります。ただし完全なランダム制御はパフォーマンスとのトレードオフがあります。

まとめ

WordPressで記事のソート順を変更するには、単発のページならWP_Query、サイト全体のメインクエリならpre_get_posts、価格や評価などのカスタムデータならmeta_key+orderbyを使う方法があります。カスタムフィールドで数値データをソートする際はmeta_value_numを使うことを忘れずに、コーディング不要で済ませたい場合はプラグインの利用も検討してみてください。