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」(価格)でソート
$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 の順になってしまう
orderby => 'meta_value'は、カスタムフィールドの値を文字列として比較します。価格のような数値データの場合、9・10・100が文字列の辞書順で10 → 100 → 9のように誤った順序になってしまいます。数値を正しく昇順・降順に並べるにはorderby => '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)
pre_get_postsフックで$query->set('orderby', 'meta_value')や$query->set('order', 'ASC')を設定します。is_main_query()とis_home()等の条件と組み合わせてメインループのみに適用します。まとめ
WordPressで記事のソート順を変更するには、単発のページならWP_Query、サイト全体のメインクエリならpre_get_posts、価格や評価などのカスタムデータならmeta_key+orderbyを使う方法があります。カスタムフィールドで数値データをソートする際はmeta_value_numを使うことを忘れずに、コーディング不要で済ませたい場合はプラグインの利用も検討してみてください。

