【WordPress】ログインユーザーの最終アクセス日時を記録・表示する方法

【WordPress】ログインユーザーの最終アクセス日時を記録・表示する方法 WordPress

WordPressで会員制サイトや社内ポータルなどを運営する場合、各ユーザーの「最終ログイン日時(最終アクセス)」を記録し、管理画面で確認できるようにすることで、アクティブユーザーの把握や不正アクセス対策に役立ちます。

この記事では、ログイン時に自動で最終アクセス日時を保存し、管理画面のユーザー一覧に表示する方法を紹介します。

スポンサーリンク

ログイン時に最終アクセス日時を記録する

まずは、ユーザーがログインしたタイミングで現在時刻を保存する処理をfunctions.phpに記述します。

functions.php:ログイン時刻の記録
function update_last_login_time($user_login, $user) {
  update_user_meta($user->ID, 'last_login', current_time('mysql'));
}
add_action('wp_login', 'update_last_login_time', 10, 2);

current_time(‘mysql’)を使うことで、WordPressのタイムゾーン設定に基づいた日時が保存されます。

管理画面に「最終ログイン日時」の列を追加する

続いて、管理画面のユーザー一覧に「最終ログイン日時」を表示するカラムを追加します。

functions.php:最終ログイン列の追加
// カラムの追加
function add_last_login_column($columns) {
  $columns['last_login'] = '最終ログイン';
  return $columns;
}
add_filter('manage_users_columns', 'add_last_login_column');

// カラムに値を表示(サイトの日付・時刻形式に合わせて整形)
function show_last_login_column($value, $column_name, $user_id) {
  if ('last_login' === $column_name) {
    $last_login = get_user_meta($user_id, 'last_login', true);
    if (!$last_login) {
      return '未ログイン';
    }
    $format = get_option('date_format') . ' ' . get_option('time_format');
    return esc_html(date_i18n($format, strtotime($last_login)));
  }
  return $value;
}
add_filter('manage_users_custom_column', 'show_last_login_column', 10, 3);

これで、ユーザー一覧画面に最終ログイン日時が表示されるようになります。まだログインしていないユーザーには「未ログイン」と表示されます。保存はMySQL形式のまま、表示時にdate_i18n()でサイトの「設定」>「一般」で指定した日付・時刻形式に変換することで、他のwp-admin画面と表示形式を揃えられます。

プロフィール画面にも表示させる(任意)

ユーザー個別のプロフィール編集画面にも最終ログイン日時を表示したい場合は、以下を追加します。

functions.php:プロフィール画面への表示
function show_last_login_in_profile($user) {
  $last_login = get_user_meta($user->ID, 'last_login', true);
  if ($last_login) {
    $format = get_option('date_format') . ' ' . get_option('time_format');
    echo '<h3>ログイン情報</h3>';
    echo '<table class="form-table"><tr><th>最終ログイン日時</th><td>' . esc_html(date_i18n($format, strtotime($last_login))) . '</td></tr></table>';
  }
}
add_action('show_user_profile', 'show_last_login_in_profile');
add_action('edit_user_profile', 'show_last_login_in_profile');

これにより、ユーザープロフィール内でもログイン履歴を確認できます。

よくある質問(FAQ)

Qユーザーのログイン時刻をカスタムユーザーメタとして記録するには?
Awp_loginアクションフックでupdate_user_meta($user->ID, ‘last_login’, current_time(‘mysql’))を実行します。wp_loginフックにはユーザーログイン名とWP_Userオブジェクトが渡されます。
Q各ページへのアクセス時刻をリアルタイムで更新するには?
Awp_loginとは別に、init等の早いタイミングのフックでis_user_logged_in()を確認し、update_user_meta()でlast_accessを更新します。頻繁な更新はDB負荷になるため、5分単位等でスロットリングするのが推奨です。
Q管理画面でユーザー一覧に最終ログイン日時カラムを表示するには?
Amanage_users_columnsフィルターでカラムを追加し、manage_users_custom_columnフィルターでget_user_meta()から最終ログイン時刻を取得して表示します。この関数はechoではなくreturnで値を返す必要があり、対象外のカラムでは受け取った$valueをそのまま返さないと一覧全体が崩れる点に注意してください。

まとめ

最終ログイン日時を記録・表示することで、ユーザーの活動状況を把握したり、長期間未ログインユーザーへの通知や削除対象の選定など、様々な活用が可能になります。

カスタム開発された会員制サイトやポータルでは、ぜひ取り入れておきたい便利なカスタマイズのひとつです。