ワードプレスのユーザーを登録日順に並べ替える

 



2020/2/19

ポータルサイトをワードプレスで運営する際はユーザーの管理画面をかなりの頻度で利用すると思いますが、一覧ページは初期の状態でID順(abc順)で表示されています。メールアドレスで並び替えができますが、利用するメリットが感じられず使い勝手が悪い状態です。

今回はそんな状況を改善するべくユーザー一覧を見やすくするための改修を行ってみたいと思います。

ユーザー管理画面一覧に登録日を表示

並び替えで一番利用しそうなのが登録日。新規で登録した人を確認するのに欠かせないとは思うのですが何故か初期状態では表示されてません。
まずは登録日を表示するところから。

メニューから一覧を選ぶとID順に並んでいることがわかります。
登録数が少ないうちはこれでも問題ないですが、増えてきた場合に難儀しそうな感じです。やはり登録日くらいは表示しておきたいところです。

//ユーザー一覧にカラムを追加
function users_columns( $columns ) {
	//$columns['追加したいデータ']='項目名';
	$columns['user_registered'] = '登録日';
	return $columns;
}
add_filter( 'manage_users_columns', 'users_columns' );

まずは追加したい項目のカラムを設定します。
上記のコードをfunction.phpに記述すると下記のようになります。

次に設定したカラムに登録日を挿入します。
先ほどのコードに追記したものが下記になります。

//ユーザー一覧にカラムを追加
function users_columns( $columns ) {
	//$columns['追加したいデータ']='項目名';
	$columns['user_registered'] = '登録日';
	return $columns;
}
add_filter( 'manage_users_columns', 'users_columns' );

//カラムにそれぞれのユーザーのデータ(今回は登録日)を挿入
function users_custom_column( $output, $column_name, $user_id ) {
	if ( $column_name == 'user_registered' ) {
		$user = get_userdata($user_id);
		return $user->user_registered;
	}
}
add_filter( 'manage_users_custom_column', 'users_custom_column', 10, 3 );

きちんと登録日が表示されることが確認できました。

登録日順に並び替え

無事登録日が表示されたので今度は並び替えができるように設定しましょう。
並び替えはパラメーターで簡単に行えるので利用しない手はありません。
利用するパラメーターは下記のようになります。

【登録が新しい順】
?orderby=user_registered&order=desc

【登録が古い順】
?orderby=user_registered&order=asc

「登録日」に上記のパラメーターを含んだリンク設定すればよいので、下記のように記述しましょう。
1点注意することは「 新しい順 」で並んだときは「 古い順 」に、「 古い順 」で並んだときは「 新しい順 」にリンクされるようにすることです。

//ユーザー一覧にカラムを追加
function users_columns( $columns ) {
	
	//並び順のパラメーターを取得
	$order_parameter = $_GET['order'];

	//並び順のパラメーターが交互になるように設定
	if($order_parameter == "desc"){
		$order='asc';
	}else{
		$order='desc';
	}

	//「登録日」にリンクを設定
	$columns['user_registered'] = '<a href="./users.php?orderby=user_registered&order='.$order.'">登録日</a>';
	return $columns;
}
add_filter( 'manage_users_columns', 'users_columns' );

//カラムにそれぞれのユーザーのデータ(今回は登録日)を挿入
function users_custom_column( $output, $column_name, $user_id ) {
	if ( $column_name == 'user_registered' ) {
		$user = get_userdata($user_id);
		return $user->user_registered;
	}
}
add_filter( 'manage_users_custom_column', 'users_custom_column', 10, 3 );

見事並び替えができました。

【登録が新しい順】

【登録が古い順】

これで一件落着です・・・と思うのはまだ早い!!!
ユーザーには権限で分けて表示する機能も付いているのでそちらも考慮しないと完ぺきとは言えません。
しっかり権限のパラメーターも継承してリンクが設定されるように改良します。
以下がそのコードです。

//ユーザー一覧にカラムを追加
function users_columns( $columns ) {

	//権限のパラメーターを取得
	$role_parameter = $_GET['role'];

	//権限のパラメーターがあった場合とない場合の設定
	if(!empty($role_parameter)){
		$role='?role='.$role_parameter.'&';
	}else{
		$role='?';
	}
	
	//並び順のパラメーターを取得
	$order_parameter = $_GET['order'];

	//リンクのパラメーターが交互になるように設定
	if($order_parameter == "desc"){
		$order='asc';
	}else{
		$order='desc';
	}

	//権限のパラメーターを考慮したリンクの設定
	$columns['user_registered'] = '<a href="./users.php'.$role.'orderby=user_registered&order='.$order.'">登録日</a>';
	return $columns;
}
add_filter( 'manage_users_columns', 'users_columns' );

//カラムにそれぞれのユーザーのデータ(今回は登録日)を挿入
function users_custom_column( $output, $column_name, $user_id ) {
	if ( $column_name == 'user_registered' ) {
		$user = get_userdata($user_id);
		return $user->user_registered;
	}
}
add_filter( 'manage_users_custom_column', 'users_custom_column', 10, 3 );

以上で登録日の並び替え設定は完了です。お疲れ様でした。

まとめ

今回はワードプレスの管理画面にあったら便利な機能を追加してみました。
フリガナやカスタムフィールドでの並び替えもできそうなので試してみると面白いかもしれません。