WordPressで会員制サイトや社内ポータルなどを運営する場合、各ユーザーの「最終ログイン日時(最終アクセス)」を記録し、管理画面で確認できるようにすることで、アクティブユーザーの把握や不正アクセス対策に役立ちます。
この記事では、ログイン時に自動で最終アクセス日時を保存し、管理画面のユーザー一覧に表示する方法を紹介します。
ログイン時に最終アクセス日時を記録する
まずは、ユーザーがログインしたタイミングで現在時刻を保存する処理を 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のタイムゾーン設定に基づいた日時が保存されます。
管理画面に「最終ログイン日時」の列を追加する
続いて、管理画面のユーザー一覧に「最終ログイン日時」を表示するカラムを追加します。
// カラムの追加
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);
return $last_login ? esc_html($last_login) : '未ログイン';
}
return $value;
}
add_filter('manage_users_custom_column', 'show_last_login_column', 10, 3);
これで、ユーザー一覧画面に最終ログイン日時が表示されるようになります。まだログインしていないユーザーには「未ログイン」と表示されます。
プロフィール画面にも表示させる(任意)
ユーザー個別のプロフィール編集画面にも最終ログイン日時を表示したい場合は、以下を追加します。
function show_last_login_in_profile($user) {
$last_login = get_user_meta($user->ID, 'last_login', true);
if ($last_login) {
echo '<h3>ログイン情報</h3>';
echo '<table class="form-table"><tr><th>最終ログイン日時</th><td>' . esc_html($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');
これにより、ユーザープロフィール内でもログイン履歴を確認できます。
まとめ
最終ログイン日時を記録・表示することで、ユーザーの活動状況を把握したり、長期間未ログインユーザーへの通知や削除対象の選定など、様々な活用が可能になります。
カスタム開発された会員制サイトやポータルでは、ぜひ取り入れておきたい便利なカスタマイズのひとつです。