ユーザーログイン/ログアウト履歴を記録する方法
WordPressでユーザーのログイン/ログアウト履歴を記録し、さらに管理画面から確認できるようにする方法を解説します。セキュリティやユーザー管理の観点から「誰が、いつログイン・ログアウトしたか」を残しておくのはとても重要です。今回は functions.php
にコードを追加して実現します。
実装のポイント
- ログイン時は
wp_login
フックで記録 - ログアウト時は
wp_logout
フックで記録 - 履歴は専用のデータベーステーブル
wp_user_logs
に保存 - 管理画面に「ログ履歴」メニューを追加して確認可能にする
functions.php にコードを追加
// 初回だけテーブル作成
function create_user_logs_table() {
global $wpdb;
$table = $wpdb->prefix . 'user_logs';
$charset = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT(20) UNSIGNED NOT NULL,
action VARCHAR(100) NOT NULL,
ip_address VARCHAR(100) NOT NULL,
user_agent TEXT NOT NULL,
created_at DATETIME NOT NULL,
PRIMARY KEY (id)
) $charset;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
create_user_logs_table(); // ← 初回だけ呼び出してテーブル作成
// ログイン成功を記録(ユーザー名付き)
add_action('wp_login', function($user_login, $user) {
global $wpdb;
$table = $wpdb->prefix . 'user_logs';
$wpdb->insert(
$table,
[
'user_id' => $user->ID,
'action' => 'login (' . sanitize_text_field($user_login) . ')',
'ip_address' => $_SERVER['REMOTE_ADDR'] ?? '',
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
'created_at' => current_time('mysql'),
],
['%d','%s','%s','%s','%s']
);
}, 10, 2);
// ログイン失敗を記録(ユーザー名も保存)
add_action('wp_login_failed', function($username) {
global $wpdb;
$table = $wpdb->prefix . 'user_logs';
$wpdb->insert(
$table,
[
'user_id' => 0, // 不明なので 0
'action' => 'login_failed (' . sanitize_text_field($username) . ')',
'ip_address' => $_SERVER['REMOTE_ADDR'] ?? '',
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
'created_at' => current_time('mysql'),
],
['%d','%s','%s','%s','%s']
);
});
// ログアウト履歴を記録
add_action('wp_logout', function() {
$user = wp_get_current_user();
global $wpdb;
$table = $wpdb->prefix . 'user_logs';
$wpdb->insert(
$table,
[
'user_id' => $user->ID,
'action' => 'logout (' . $user->user_login . ')',
'ip_address' => $_SERVER['REMOTE_ADDR'] ?? '',
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
'created_at' => current_time('mysql'),
],
['%d','%s','%s','%s','%s']
);
});
// 管理画面メニューを追加
add_action('admin_menu', function() {
add_menu_page(
'ユーザーログ履歴', // ページタイトル
'ログ履歴', // メニュータイトル
'manage_options', // 権限
'user-logs', // スラッグ
'my_user_logs_page', // コールバック関数
'dashicons-list-view' // アイコン
);
});
// ログ履歴ページを表示(最新50件)
function my_user_logs_page() {
global $wpdb;
$table = $wpdb->prefix . 'user_logs';
$results = $wpdb->get_results("SELECT * FROM $table ORDER BY created_at DESC LIMIT 50");
echo '<div class="wrap"><h1>ユーザーログ履歴</h1>';
echo '<div style="overflow:auto; max-height:500px; border:1px solid #ccc; background:#f9f9f9; padding:10px;">';
echo '<table style="width:100%; border-collapse:collapse; font-family:monospace;">';
echo '<thead><tr>';
echo '<th>ID</th><th>User ID</th><th>Action</th><th>IP</th><th>UA</th><th>Date</th>';
echo '</tr></thead><tbody>';
foreach ($results as $row) {
echo '<tr>';
echo '<td>' . esc_html($row->id) . '</td>';
echo '<td>' . esc_html($row->user_id) . '</td>';
echo '<td>' . esc_html($row->action) . '</td>';
echo '<td>' . esc_html($row->ip_address) . '</td>';
echo '<td>' . esc_html($row->user_agent) . '</td>';
echo '<td>' . esc_html($row->created_at) . '</td>';
echo '</tr>';
}
echo '</tbody></table></div></div>';
}
補足:
管理画面のサイドメニューに「ログ履歴」という項目が追加され、そこから最新50件のログイン/ログアウト履歴を確認できます。
User ID、login,logout、IP(IPアドレス)、UA(機種)、Dateが表示されます。
管理画面のサイドメニューに「ログ履歴」という項目が追加され、そこから最新50件のログイン/ログアウト履歴を確認できます。
User ID、login,logout、IP(IPアドレス)、UA(機種)、Dateが表示されます。
代用プラグイン
- Simple History – ユーザー操作やログイン履歴を記録できる便利なプラグイン
- Activity Log – サイト全体のユーザーアクティビティを監査可能
まとめ
WordPressでユーザーログイン/ログアウト履歴を記録し、管理画面で確認できる仕組みを紹介しました。セキュリティ強化やユーザー管理に役立つので、カスタマイズコードかプラグインを活用して導入しましょう。