【WordPress】管理画面でカスタムフィールドをソート可能にする方法

【WordPress】管理画面でカスタムフィールドをソート可能にする方法 WordPress

WordPressでは、管理画面の投稿一覧でタイトルや公開日などのカラムはクリックで並び替えができますが、カスタムフィールド(例:価格や優先度など)の値で並び替えるにはカスタマイズが必要です。本記事では、ACFやmeta boxなどで登録されたカスタムフィールドを、管理画面の投稿一覧でソート可能にする方法を解説します。

カスタムフィールドのカラムを管理画面に追加する

まずは投稿一覧にカスタムフィールドの列(カラム)を追加します。以下は「価格(price)」というカスタムフィールドを表示する例です。

// カラムを追加
function add_price_column($columns) {
  $columns['price'] = '価格';
  return $columns;
}
add_filter('manage_post_posts_columns', 'add_price_column');

// カラムの内容を表示
function show_price_column($column_name, $post_id) {
  if ($column_name === 'price') {
    $price = get_post_meta($post_id, 'price', true);
    echo esc_html($price);
  }
}
add_action('manage_post_posts_custom_column', 'show_price_column', 10, 2);

カスタムフィールドでソート可能にする

次に、先ほど追加した「価格」カラムをソート可能にします。以下のように設定します。

// ソート可能なカラムを追加
function make_price_column_sortable($columns) {
  $columns['price'] = 'price';
  return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'make_price_column_sortable');

// ソート時のクエリを調整
function sort_posts_by_price($query) {
  if (!is_admin() || !$query->is_main_query()) return;

  if ($query->get('orderby') === 'price') {
    $query->set('meta_key', 'price');
    $query->set('orderby', 'meta_value_num'); // 数値ソート(価格など)
  }
}
add_action('pre_get_posts', 'sort_posts_by_price');

これで管理画面の投稿一覧に「価格」カラムが表示され、クリックで昇順・降順に並び替えが可能になります。

カスタム投稿タイプにも対応させる

上記の例は「post」投稿タイプに対するものです。manage_●●_posts_columnsmanage_edit-●●_sortable_columns の部分を、カスタム投稿タイプのスラッグに置き換えれば、任意の投稿タイプにも適用できます。

たとえば、カスタム投稿タイプが event の場合:

add_filter('manage_event_posts_columns', 'add_price_column');
add_action('manage_event_posts_custom_column', 'show_price_column', 10, 2);
add_filter('manage_edit-event_sortable_columns', 'make_price_column_sortable');

まとめ

管理画面でカスタムフィールドを使ったソート機能を追加することで、運用効率が大幅に向上します。特にECサイトや案件管理サイトなどで価格・優先度・日付などを管理する場合には非常に便利です。

ACFなどのプラグインと組み合わせることで、より柔軟なカスタマイズも可能になります。実用的な管理画面を構築して、WordPressの操作性を高めましょう。