【WordPress】管理画面のカスタム投稿に並び順のドロップダウンを追加する方法

【WordPress】管理画面のカスタム投稿に並び順のドロップダウンを追加する方法 WordPress

WordPressの管理画面でカスタム投稿タイプを利用していると、投稿の並び順を自由に切り替えたいケースがあります。この記事では、管理画面の投稿一覧に「並び順」ドロップダウンを追加し、選択に応じて投稿を並べ替える方法を紹介します。

並び順セレクトを管理画面に追加する

以下のコードを functions.php に追加することで、投稿一覧の上部に並び替え用のセレクトボックスを追加できます。


// ドロップダウンメニューの追加
function add_custom_orderby_dropdown() {
  global $typenow;
  if ($typenow === 'your_post_type') {
    $orderby = isset($_GET['orderby_custom']) ? $_GET['orderby_custom'] : '';
    echo ' <select name="orderby_custom">';
    echo '<option value="">並び順を選択</option>';
    echo '<option value="title"' . selected($orderby, 'title', false) . '>タイトル順</option>';
    echo '<option value="menu_order"' . selected($orderby, 'menu_order', false) . '>メニュー順</option>';
    echo '<option value="date"' . selected($orderby, 'date', false) . '>公開日順</option>';
    echo '</select>';
  }
}
add_action('restrict_manage_posts', 'add_custom_orderby_dropdown');

your_post_typeの部分は実際のカスタム投稿タイプ名に置き換えてください。

並び替え条件に応じたクエリ変更処理

選択された並び順に応じて、クエリの orderby を変更する必要があります。以下のようにフックで制御します。


// クエリを並び順に応じて変更
function custom_orderby_query($query) {
  if (!is_admin() || !$query->is_main_query()) {
    return;
  }

  global $pagenow;
  if ($pagenow === 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] === 'your_post_type') {
    if (!empty($_GET['orderby_custom'])) {
      $orderby = $_GET['orderby_custom'];
      $query->set('orderby', $orderby);
      $query->set('order', 'ASC'); // または DESC に変更可能
    }
  }
}
add_action('pre_get_posts', 'custom_orderby_query');

カスタムフィールドで並び替えたい場合

例えば、priorityというカスタムフィールドを使って並び替えたい場合は、次のようにします。


if ($orderby === 'priority') {
  $query->set('meta_key', 'priority');
  $query->set('orderby', 'meta_value_num');
}

まとめ

管理画面の投稿一覧に並び順セレクトボックスを追加すれば、カスタム投稿の運用効率が大幅に向上します。タイトル順やカスタムフィールド順など、必要な軸に応じて柔軟に拡張可能です。業務用途でWordPressを利用する場合には、ぜひ取り入れておきたい機能の一つです。