ユーザーログイン/ログアウト履歴を記録する方法

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が表示されます。

代用プラグイン

  • Simple History – ユーザー操作やログイン履歴を記録できる便利なプラグイン
  • Activity Log – サイト全体のユーザーアクティビティを監査可能

まとめ

WordPressでユーザーログイン/ログアウト履歴を記録し、管理画面で確認できる仕組みを紹介しました。セキュリティ強化やユーザー管理に役立つので、カスタマイズコードかプラグインを活用して導入しましょう。