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をそのまま返さないと一覧全体が崩れる点に注意してください。
まとめ
最終ログイン日時を記録・表示することで、ユーザーの活動状況を把握したり、長期間未ログインユーザーへの通知や削除対象の選定など、様々な活用が可能になります。
カスタム開発された会員制サイトやポータルでは、ぜひ取り入れておきたい便利なカスタマイズのひとつです。

