【WordPress】カスタム投稿タイプのアーカイブページを任意の順序で並び替える方法

【WordPress】カスタム投稿タイプのアーカイブページを任意の順序で並び替える方法 WordPress

WordPressでは、カスタム投稿タイプ(CPT)を導入することで、投稿・固定ページ以外にも用途に応じたコンテンツ管理が可能になります。しかし、アーカイブページでの並び順はデフォルトでは投稿日順になっていることが多く、任意の順序で表示したいケースではひと工夫が必要です。

この記事では、カスタムフィールドやメニュー順などを使って、カスタム投稿タイプのアーカイブページを自由な順番で並び替える方法を解説します。

アーカイブの並び替えはpre_get_postsで制御する

WordPressでは、アーカイブページのクエリに対して pre_get_posts フックを使うことで、表示順の制御が可能です。以下の例では、カスタム投稿タイプ「product」を menu_order の昇順で並べ替える処理を実装しています。

function custom_archive_order($query) {
  if (!is_admin() && $query->is_main_query() && is_post_type_archive('product')) {
    $query->set('orderby', 'menu_order');
    $query->set('order', 'ASC');
    $query->set('posts_per_page', -1); // 必要に応じて制限
  }
}
add_action('pre_get_posts', 'custom_archive_order');

このコードを functions.php に追加すれば、「product」のアーカイブページは menu_order に従って表示されるようになります。

管理画面で並び順を設定するには

menu_order を使うためには、管理画面で値を設定できるようにする必要があります。投稿編集画面でドラッグ&ドロップで並び替えたい場合は、「Intuitive Custom Post Order」などのプラグインが便利です。

あるいは、カスタムフィールドやACF(Advanced Custom Fields)を使って独自の並び順を設定し、meta値で制御することも可能です。

function custom_archive_order_by_meta($query) {
  if (!is_admin() && $query->is_main_query() && is_post_type_archive('product')) {
    $query->set('meta_key', 'display_order');
    $query->set('orderby', 'meta_value_num');
    $query->set('order', 'ASC');
  }
}
add_action('pre_get_posts', 'custom_archive_order_by_meta');

この例では、カスタムフィールド「display_order」の数値で昇順に並び替えています。

投稿タイプ登録時にsupportsに’menu_order’を追加

menu_order を使うには、カスタム投稿タイプの登録時に page-attributes を有効にしておく必要があります。

register_post_type('product', array(
  'label' => '商品',
  'public' => true,
  'has_archive' => true,
  'supports' => array('title', 'editor', 'thumbnail', 'page-attributes'),
));

page-attributes を指定することで、「表示順(menu_order)」が投稿編集画面の右側に表示されます。

orderbyに対応する値一覧

WordPressの orderby に指定できる主な値は以下のとおりです:

  • date:投稿日時
  • title:投稿タイトル
  • menu_order:表示順
  • meta_value:カスタムフィールド(文字列)
  • meta_value_num:カスタムフィールド(数値)

表示したい順序に合わせて最適な並び順を選びましょう。

まとめ

カスタム投稿タイプのアーカイブページを任意の順序で並べ替えるには、pre_get_postsを利用してorderbymeta_keyを設定する方法が基本です。用途に応じて、menu_orderやカスタムフィールドを使い分けることで、柔軟な表示順制御が可能になります。

また、管理画面での入力性を高めるために、ACFや並び替え用プラグインの導入も併せて検討すると効率的です。