管理画面のユーザー一覧に独自のカラムを追加する方法。分かりにくいので詳しく書きました。投稿一覧と大体同じだけど、使うフック名が違います。
やりたいこと
管理画面「ユーザー」ページのユーザー一覧の表にカラム(項目)を追加する。既存のカラムを削除する。既存のカラムの並び順を変える。
カラムをソートできるようにする。
コード
まずコード。自分で決める任意の名前は、区別しやすく「my-」または「my_」から始まる名前にしてあります。
<?php
add_filter('manage_users_columns', 'my_manage_users_columns');
add_filter('manage_users_custom_column', 'my_manage_users_custom_column', 10, 3);
add_filter('manage_users_sortable_columns', 'my_manage_users_sortable_columns');
add_action('pre_get_users', 'my_pre_get_users');
// カラムを追加・削除する
function my_manage_users_columns($columns) {
// 削除するカラム
$remove_columns = array(
'name', // 既存のカラム name が要らないので削除する
'posts' // 既存のカラム posts の順番を一番最後に変えたいので一旦削除
);
// 追加するカラム。 カラム名(任意) => カラムのラベル(任意)
$add_columns = array(
'my-column-name-1' => 'ラベル1',
'my-column-name-2' => 'ラベル2',
'posts' => '投稿' // 一旦削除したやつを最後に追加
);
foreach($remove_columns as $column) {
unset($columns[$column]);
}
return array_merge($columns, $add_columns);
}
// セルに表示させる値
function my_manage_users_custom_column($output, $column_name, $user_id) {
switch($column_name) {
case 'my-column-name-1':
// 処理
return; // セルに表示させる値
case 'my-column-name-2':
// 処理
return; // セルに表示させる値
}
}
// カラムにソート機能をつける
function my_manage_users_sortable_columns($columns) {
// ソートさせたいカラム。カラム名 => ソート名(任意)
$add_columns = array(
'my-column-name-1' => 'my-sort-name-1',
'my-column-name-2' => 'my-sort-name-2'
);
return array_merge($columns, $add_columns);
}
// どうソートさせるかを設定
function my_pre_get_users($query) {
// 管理画面じゃない場合は無視
if(!is_admin()) return;
// 一覧のソートボタンを押すと$_GET['orderby']にソート名が入ってくるので、それをもとに分岐
if($orderby = $query->get('orderby')) {
switch($orderby) {
case 'my-sort-name-1':
// 処理
// カスタム項目を使う場合はこんな感じ。ただし、指定した meta_key を持つユーザーのみが表示される
$query->set('meta_key', 'my_meta_key_name_1');
$query->set('orderby', 'meta_value');
break;
case 'my-sort-name-2':
// 処理
break;
}
}
}
解説
カラムの追加・削除・移動
まず、manage_users_columns
フックでカラムを追加(削除)します。
既存のカラムを移動させる方法は、なかなか一筋縄にはいかず、僕は一旦削除してからもう一度好きな場所に追加する方法をとっています。
既存のカラムのカラム名を知る方法
カラムの見出し(thタグ)のidプロパティの値がカラム名なので、ChromeやSafariのWebインスペクタを使うかページのソースを見て調べます。
セルに表示させる値
カラムを作成したら、manage_users_custom_column
フックでセルに表示させる値を決めます。
呼び出し関数にはカラム名や各行のユーザーIDが返ってくるので、それらを使いましょう。
さて、ここまででカラム作成は完了ですが、ソート機能を持たせたい場合は、もうちょいやることがあります。
カラムをソートできるようにする
カラムをソートできるようにするには、my_manage_users_sortable_columns
フックを使います。やることは manage_users_columns
と同じです。
ここで、カラム名にソート用の名前をつけましたが、この名前は、ソートをした際にGETキー(orderby=my-sort-name-1)として使われます。
このGETパラメータ orderby をもとに、どのカラム基準でソートを行うか決まります。
ソートの基準を決める
最後に、カラムごとに何を基準にソートさせるかを決めなければなりません。これは pre_get_users
を使います。
pre_get_users
とは、簡単に言うとユーザー情報に関するリクエストを扱う WP_User_Query
の生成前に実行するものです。つまり、上記の GETパラメータ orderbyをもとに条件分岐させて、ユーザー一覧を作成するためのクエリをここで変更するというあんばい。
書き方は pre_get_posts
とほぼ同じです。