
WordPress 3分間フッキングシリーズについて
こんにちは、WordPressエンジニアの皆さん!川越市を拠点に埼玉県全域でWordPressサイトの構築・カスタマイズ・保守サポートを提供している私たちが、「WordPress 3分間フッキング」シリーズをお届けします。
あの国民的料理番組「3分間クッキング」をもじった、WordPress開発者のための「3分間フッキング」、今回はユーザー一覧画面をカスタマイズする方法をご紹介します!
このシリーズでは、WordPressの真髄とも言える「フック」を使った実用的なテクニックを、functions.phpに数行書くだけで実現できる形でお伝えしていきます。
なぜユーザー一覧画面をカスタマイズする必要があるのか?
WordPressの管理画面にある「ユーザー」一覧は、サイトのユーザー管理において重要な役割を果たしています。しかし、標準の状態では限られた情報しか表示されず、多くのサイト運営者にとって物足りないことがあります。
ユーザー一覧画面をカスタマイズすることで、サイト管理に役立つ情報をすぐに確認でき、運営効率が大幅に向上します!
具体的なメリットには以下のようなものがあります:
- ユーザー管理の効率化:必要な情報を一目で確認できるようになる
- セキュリティ向上:最終ログイン日時を表示することで不審なアクセスを検出しやすくなる
- ユーザー活動の把握:誰が最近サイトを利用しているかがわかる
- 運営判断のサポート:長期間ログインのないユーザーを特定し、対応を検討できる
特に複数の管理者や編集者がいるサイトでは、ユーザーIDと最終ログイン日時を表示することで、より効果的なユーザー管理が可能になります。
それでは早速、コードを見ていきましょう!
ユーザー一覧カスタマイズのコード解説
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// ユーザー一覧にカラムを追加 add_filter('manage_users_columns', function ($columns) { return array_merge( array('cb' => $columns['cb']), array('user_id' => 'ユーザーID'), $columns, array('last_login' => '最終ログイン') ); }); // カラムの内容を表示 add_action('manage_users_custom_column', function ($dummy, $column_name, $user_id) { if ('user_id' === $column_name) return $user_id; if ('last_login' === $column_name) return get_user_meta($user_id, 'my-login', true); }, 10, 3); // ログイン時に日時を記録 add_action('wp_login', function ($user_login, $user) { update_user_meta($user->ID, 'my-login', date_i18n('Y-m-d H:i')); }, 10, 2); |
このコードは、わずか20行ほどですが、3つの重要なフックを利用して以下の機能を実現しています:
- ユーザー一覧画面に「ユーザーID」と「最終ログイン」の2つの列を追加
- 追加した列に適切な値を表示
- ユーザーがログインするたびに、その日時を記録
それでは、それぞれのフックの役割を詳しく解説していきましょう。
1. manage_users_columnsフィルターフック
最初のフックは、ユーザー一覧テーブルの列(カラム)を変更するためのフィルターです。
1 2 3 4 5 6 7 8 9 10 |
add_filter('manage_users_columns', 'wp3min_add_user_columns'); function wp3min_add_user_columns($columns) { return array_merge( array('cb' => $columns['cb']), // チェックボックス列を維持 array('user_id' => 'ユーザーID'), // ユーザーID列を最初に追加 $columns, // 既存の列をそのまま挿入 array('last_login' => '最終ログイン') // 最終ログイン列を最後に追加 ); } |
このフックでは以下のことを行っています:
array_merge()
関数を使って、複数の配列を結合- チェックボックス列(
'cb'
)を一番最初に配置(これは必須) - その次に「ユーザーID」列を追加
- 既存の列(ユーザー名、名前、メールなど)をそのまま保持
- 最後に「最終ログイン」列を追加
重要:チェックボックス列(’cb’)は必ず最初に配置する必要があります。そうしないとバルク操作(複数選択)機能が正しく動作しなくなります。
2. manage_users_custom_columnアクションフック
2つ目のフックは、追加した列に表示する内容を定義するためのアクションフックです。
1 2 3 4 5 6 7 |
add_action('manage_users_custom_column', 'wp3min_display_user_columns', 10, 3); function wp3min_display_user_columns($dummy, $column_name, $user_id) { if ('user_id' === $column_name) return $user_id; if ('last_login' === $column_name) return get_user_meta($user_id, 'my-login', true); return $dummy; // その他の列はデフォルト値を返す } |
この関数は3つの引数を受け取ります:
引数 | 説明 |
---|---|
$dummy |
空の文字列(通常は使用しない) |
$column_name |
現在処理している列の識別子 |
$user_id |
現在処理しているユーザーのID |
各列の表示内容は次のように処理されます:
- 「ユーザーID」列:単純にユーザーIDをそのまま返す
- 「最終ログイン」列:
get_user_meta()
関数を使ってユーザーのメタデータから最終ログイン時間を取得
3. wp_loginアクションフック
3つ目のフックは、ユーザーがログインしたときに実行されるアクションフックです。
1 2 3 4 5 |
add_action('wp_login', 'wp3min_record_user_login', 10, 2); function wp3min_record_user_login($user_login, $user) { update_user_meta($user->ID, 'my-login', date_i18n('Y-m-d H:i')); } |
この関数は2つの引数を受け取ります:
引数 | 説明 |
---|---|
$user_login |
ログインしたユーザーのユーザー名 |
$user |
ログインしたユーザーのWP_Userオブジェクト |
この関数の役割は:
update_user_meta()
関数を使ってユーザーのメタデータを更新date_i18n()
関数でWordPressのロケール設定に基づいた日時フォーマットを使用'my-login'
というキーで最終ログイン日時を保存
これにより、ユーザーがサイトにログインするたびに、そのタイミングが自動的に記録されるようになります!
実装手順
それでは、実際にこのコードを使ってユーザー一覧をカスタマイズしてみましょう!
- WordPressの管理画面から「外観」→「テーマエディター」へ移動します
- 右側のファイル一覧から「functions.php」を選択します
- ファイルの適切な位置に、以下のコードを追加します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/** * ユーザー一覧画面をカスタマイズ */ // ユーザー一覧にカラムを追加 add_filter('manage_users_columns', 'wp3min_add_user_columns'); function wp3min_add_user_columns($columns) { return array_merge( array('cb' => $columns['cb']), array('user_id' => 'ユーザーID'), $columns, array('last_login' => '最終ログイン') ); } // カラムの内容を表示 add_action('manage_users_custom_column', 'wp3min_display_user_columns', 10, 3); function wp3min_display_user_columns($dummy, $column_name, $user_id) { if ('user_id' === $column_name) return $user_id; if ('last_login' === $column_name) return get_user_meta($user_id, 'my-login', true); return $dummy; } // ログイン時に日時を記録 add_action('wp_login', 'wp3min_record_user_login', 10, 2); function wp3min_record_user_login($user_login, $user) { update_user_meta($user->ID, 'my-login', date_i18n('Y-m-d H:i')); } |
初めてコードを追加した時点では、まだ「最終ログイン」データは空です。これは、このコードを追加した後にログインしたユーザーのデータのみが記録されるためです。既存のユーザーについては、それぞれが次回ログインした際に日時が記録されるようになります。
カスタマイズポイント
基本的なコードを理解したところで、さらに便利にするためのカスタマイズ例を見ていきましょう。
1. 列のソート機能を追加
「ユーザーID」と「最終ログイン」列でソート(並べ替え)ができると便利です。以下のコードで実現できます:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// ソート可能な列を指定 add_filter('manage_users_sortable_columns', 'wp3min_sortable_user_columns'); function wp3min_sortable_user_columns($columns) { $columns['user_id'] = 'ID'; $columns['last_login'] = 'last_login'; return $columns; } // ソート処理を追加(pre_get_usersフックを使用) add_action('pre_get_users', 'wp3min_sort_users_by_login'); function wp3min_sort_users_by_login($query) { if (!is_admin()) return; $orderby = $query->get('orderby'); if ('last_login' === $orderby) { $query->set('meta_key', 'my-login'); $query->set('orderby', 'meta_value'); } } |
2. 最終ログインの表示形式をカスタマイズ
日時の表示形式を変更したり、「〇日前」のような相対時間を表示することもできます:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function wp3min_display_user_columns($dummy, $column_name, $user_id) { if ('user_id' === $column_name) return $user_id; if ('last_login' === $column_name) { $last_login = get_user_meta($user_id, 'my-login', true); if (empty($last_login)) { return '<span style="color: #999;">未ログイン</span>'; } // 相対時間で表示(例: 2日前、3時間前) $login_time = strtotime($last_login); $current_time = current_time('timestamp'); $time_diff = $current_time - $login_time; if ($time_diff < 86400) { // 24時間以内 $hours = floor($time_diff / 3600); return "{$hours}時間前"; } else { $days = floor($time_diff / 86400); return "{$days}日前"; } } return $dummy; } |
3. 初回表示時のデータ設定
コードを追加した初期段階では「最終ログイン」データが空ですが、既存のユーザーにもデフォルト値を設定することができます:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 初期データを設定する関数 function wp3min_init_login_data() { // このフラグが設定済みかチェック if (get_option('wp3min_login_data_initialized')) return; // すべてのユーザーを取得 $users = get_users(); foreach ($users as $user) { // 最終ログインデータがなければ現在時刻を設定 if (!get_user_meta($user->ID, 'my-login', true)) { update_user_meta($user->ID, 'my-login', date_i18n('Y-m-d H:i')); } } // フラグを設定して再実行を防止 update_option('wp3min_login_data_initialized', true); } // 管理画面読み込み時に一度だけ実行 add_action('admin_init', 'wp3min_init_login_data'); |
応用例:さらに多くの情報を表示
「ユーザーID」と「最終ログイン」以外にも、さまざまな情報を表示させることができます。以下にいくつかの例を示します:
1. 投稿数やコメント数を表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function wp3min_add_more_user_columns($columns) { $columns['post_count'] = '投稿数'; $columns['comment_count'] = 'コメント数'; return $columns; } function wp3min_display_more_user_columns($value, $column_name, $user_id) { switch ($column_name) { case 'post_count': $count = count_user_posts($user_id, 'post', true); return $count; case 'comment_count': global $wpdb; $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments WHERE user_id = %d", $user_id)); return $count ? $count : 0; } return $value; } |
2. ユーザーの登録日を表示
1 2 3 4 5 6 7 8 9 10 11 12 |
function wp3min_add_registration_date_column($columns) { $columns['registered'] = '登録日'; return $columns; } function wp3min_display_registration_date($value, $column_name, $user_id) { if ('registered' === $column_name) { $user = get_userdata($user_id); return date_i18n('Y-m-d', strtotime($user->user_registered)); } return $value; } |
追加できる情報 | 取得方法 | 用途・メリット |
---|---|---|
ユーザーID | 直接利用可能 | ユーザー参照やデバッグに便利 |
最終ログイン | ユーザーメタデータ | ユーザーアクティビティの把握 |
投稿数 | count_user_posts関数 | コンテンツ貢献度の把握 |
コメント数 | データベースクエリ | ユーザーエンゲージメントの測定 |
登録日 | user_registeredプロパティ | アカウント履歴の確認 |
カスタムフィールド | get_user_meta関数 | 追加情報の表示 |
実装時の注意点
ユーザー一覧のカスタマイズ時には、いくつか注意すべき点があります:
- チェックボックス列(’cb’)は必ず最初に配置すること
- 表示するユーザー数が多い場合、メタデータの取得などでパフォーマンスが低下する可能性がある
- 機密情報を表示する場合は、適切な権限チェックを行うこと
- WordPressのバージョンアップによって挙動が変わる可能性がある
- 他のプラグインとの競合に注意すること
特にパフォーマンスについては、ユーザー数が多いサイトでは考慮が必要です。必要に応じてキャッシュの仕組みを導入するとよいでしょう。
まとめ
いかがでしたか?わずか20行ほどのコードで、WordPressのユーザー一覧画面に便利な情報を追加できることがわかりました。
フックを上手に使うことで、プラグインをインストールしなくても、WordPressの管理画面を自分好みにカスタマイズできます!
今回のポイントをおさらいしましょう:
manage_users_columns
フィルターでユーザー一覧の列を追加・変更できるmanage_users_custom_column
アクションで列の内容を表示できるwp_login
アクションでユーザーのログイン情報を記録できる- シンプルなコードで管理画面の使い勝手を大幅に向上できる
- 用途に合わせて様々なカスタマイズが可能
埼玉県川越市をベースに活動する私たちは、このようなWordPressカスタマイズのノウハウを活かして、クライアント様のサイト運営をサポートしています。管理画面の最適化は日々の運用効率化につながり、長期的な運営コストの削減にも貢献します。
次回の「WordPress 3分間フッキング」もお楽しみに!別のフックを使った便利技をご紹介します。
よくある質問
Q: 最終ログインのデータがすべて空になっていますが?
A: このコードを追加した後にユーザーがログインした場合のみ記録が始まります。既存のユーザーについては、ログインするまでデータが表示されません。必要に応じて初期データ設定の関数を使って埋めることができます。
Q: カラムをクリックしてもソートできません
A: ソート機能を有効にするには、「カスタマイズポイント」セクションで紹介したmanage_users_sortable_columns
フィルターとpre_get_users
アクションを追加する必要があります。
Q: 特定のユーザーロールにのみカラムを表示することはできますか?
A: はい、現在のユーザーの権限をチェックして、特定のロールにのみ情報を表示することができます。例えばcurrent_user_can('administrator')
で管理者かどうかをチェックできます。
WordPressサイトの管理画面カスタマイズに関するご相談は、WordPressカスタマイズ・プラグイン開発サービスをご利用ください。また、より高度なカスタマイズや技術サポートが必要な場合は、WordPress顧問エンジニアサービスもご検討いただければ幸いです。