メインコンテンツへスキップ
Edel Hearts
  • 会社情報
  • サービス一覧
    • WordPressサイトのカスタマイズ・プラグイン開発
    • WordPressトラブル対応・お悩み解決
    • WordPress保守サポートサービス
    • 顧問エンジニアサービス
  • プラグインストア
    • Bar Chart Race Pro
    • Edel Booking Pro
    • Edel Museum Generator Pro
    • Edel Chat Pro
    • Edel Smart Quote Pro
  • お知らせ・コラム
  • お問い合わせ
  • 会社情報
  • サービス一覧
    • WordPressサイトのカスタマイズ・プラグイン開発
    • WordPressトラブル対応・お悩み解決
    • WordPress保守サポートサービス
    • 顧問エンジニアサービス
  • プラグインストア
    • Bar Chart Race Pro
    • Edel Booking Pro
    • Edel Museum Generator Pro
    • Edel Chat Pro
    • Edel Smart Quote Pro
  • お知らせ・コラム
  • お問い合わせ
3分間フッキング

WordPress 3分間フッキング:ユーザー一覧をカスタマイズする方法

2024-06-15
  1. HOME
  2. 3分間フッキング
  3. WordPress 3分間フッキング:ユーザー一覧をカスタマイズする方法

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つの重要なフックを利用して以下の機能を実現しています:

  1. ユーザー一覧画面に「ユーザーID」と「最終ログイン」の2つの列を追加
  2. 追加した列に適切な値を表示
  3. ユーザーがログインするたびに、その日時を記録

それでは、それぞれのフックの役割を詳しく解説していきましょう。

WordPressユーザー一覧画面のカスタマイズ前後の比較と実装方法

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ユーザーログインデータの流れと活用方法の図解

実装手順

それでは、実際にこのコードを使ってユーザー一覧をカスタマイズしてみましょう!

  1. WordPressの管理画面から「外観」→「テーマエディター」へ移動します
  2. 右側のファイル一覧から「functions.php」を選択します
  3. ファイルの適切な位置に、以下のコードを追加します
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関数 追加情報の表示

    実装時の注意点

    ユーザー一覧のカスタマイズ時には、いくつか注意すべき点があります:

    1. チェックボックス列(’cb’)は必ず最初に配置すること
    2. 表示するユーザー数が多い場合、メタデータの取得などでパフォーマンスが低下する可能性がある
    3. 機密情報を表示する場合は、適切な権限チェックを行うこと
    4. WordPressのバージョンアップによって挙動が変わる可能性がある
    5. 他のプラグインとの競合に注意すること

    特にパフォーマンスについては、ユーザー数が多いサイトでは考慮が必要です。必要に応じてキャッシュの仕組みを導入するとよいでしょう。

    まとめ

    いかがでしたか?わずか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顧問エンジニアサービスもご検討いただければ幸いです。

    #functions.php #manage_users_columns #WordPress #wp_login #カスタマイズ #フック #ユーザーメタ #ユーザー管理 #最終ログイン #管理画面

    この記事をシェア

    X Facebook LINE
    前の記事 「AIオートメタ」プラグインでWordPressブログ運営を効率化!OpenAIが記事作成をアシスト 次の記事 WordPress 3分間フッキング:ページ上部にメンテナンス告知を表示する方法

    関連記事

    WordPress 3分間フッキング:alt属性が未設定の画像にテキストを自動挿入する 3分間フッキング
    2026-03-10

    WordPress 3分間フッキング:alt属性が未設定の画像にテキストを自動挿入する

    WordPress 3分間フッキング:SVGファイルのアップロードを許可する方法 3分間フッキング
    2026-01-15

    WordPress 3分間フッキング:SVGファイルのアップロードを許可する方法

    WordPress 3分間フッキング:外部リンク設定を自動化!target=”_blank”とrel=”noopener”をフックで一括付与 3分間フッキング
    2026-01-11

    WordPress 3分間フッキング:外部リンク設定を自動化!target=”_blank”とrel=”noopener”をフックで一括付与

    WordPress 3分間フッキング:記事本文の画像にloading=”lazy”をフックで自動付与する 3分間フッキング
    2025-12-11

    WordPress 3分間フッキング:記事本文の画像にloading=”lazy”をフックで自動付与する

    カテゴリー

    • 3分間フッキング
    • AIチャットボット活用
    • Udemy講座
    • Web制作Tips
    • WordPressカスタマイズ
    • WordPress開発
    • お知らせ
    • お知らせ・コラム
    • サイト改善ガイド
    • セキュリティ
    • トラブルシューティング
    • プラグイン情報
    • 事例紹介
    Edel Hearts

    Edel Ideas. Touching Hearts.

    〒350-1151 埼玉県川越市今福385
    • ご利用規約
    • 個人情報保護方針
    • 特商法に基づく表記
    • Webサイト無料診断
    • プラグインテンプレート
    • Udemy講座
    • 会社情報
    • サービス一覧
    • プラグインストア
    • お知らせ・コラム
    • お問い合わせ

    © 2026 Edel Hearts. All rights reserved.