コンテンツへスキップ ナビゲーションに移動
WordPressの今日から使える便利Tips
  • ホーム
  • ご利用時の注意事項
  • カテゴリー別投稿一覧
  • カテゴリー説明付き一覧
便利Tips
  1. HOME
  2. 便利Tips
  3. ユーザーログイン/ログアウト履歴を記録する方法

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

2025年9月19日 最終更新日時 : 2025年10月29日 login_user
目次
  • 1 実装のポイント
  • 2 functions.php にコードを追加
  • 3 代用プラグイン
  • 4 まとめ
  • 4.1 関連記事
読むまで約 12 分

WordPressでユーザーのログイン/ログアウト履歴を記録し、さらに管理画面から確認できるようにする方法を解説します。セキュリティやユーザー管理の観点から「誰が、いつログイン・ログアウトしたか」を残しておくのはとても重要です。今回は functions.php にコードを追加して実現します。

1 実装のポイント

  • ログイン時は wp_login フックで記録
  • ログアウト時は wp_logout フックで記録
  • 履歴は専用のデータベーステーブル wp_user_logs に保存
  • 管理画面に「ログ履歴」メニューを追加して確認可能にする

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

3 代用プラグイン

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

4 まとめ

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

4.1 関連記事

  • 全登録ユーザーを一旦ログアウトさせて、次回ログイン時に運営者にメールを送信させる方法
  • どのユーザーがいつログインしたか、誰が記事を編集したか確認できる方法
  • ワードプレスのログイン画面のロゴを変更する方法

この記事を読んだ人はこちらも読んでいます

  • jQueryなしでスライダーを実装する方法(Vanilla JS)
  • ページ内スクロールで要素が横からスライドインする方法
  • Contact Form 7の特殊ショートコード一覧と使い方
カテゴリー
便利Tips、セキュリティ・アクセス制御
タグ
ログインログアウト履歴
前の記事
メタディスクリプション&OGP自動設定の完全マニュアル
2025年9月19日
次の記事
公開終了日時(閉鎖日時)を設定して自動的に記事を非公開にする方法
2025年9月19日

ご利用時の注意事項

必ずご利用時の注意事項等 をお読み下さい。
▶ ご利用時の注意事項
▶ プライバシーポリシー

検索

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

じゃんけんゲーム

あなたの手を選んで!!

2025年9月19日公開
ただいま258件の便利なTips等公開中
本日までの閲覧数4547人
本日の閲覧者数3人

現在のオンラインユーザー数:2 人

運営者

ロゴ多摩地域在住の自宅フリーランスのおやじ。日々パソコンとにらめっこ。

とんラボ
・ウェブサイト制作
・ウェブシステム開発等
フリーランス歴十数年、最近は自治体のごみ持ち込み申請システムの開発など。

お問い合わせ

最近の投稿

ワイドCTAの作り方ワイドCTAの作り方|WordPressで反応率が上がるデザイン手順
経歴タイムラインを美しく表示する方法経歴タイムラインを美しく表示する方法|CSSで簡単に作れるデザイン例
サイトが攻撃で落ちた時に、別サーバーへすぐ切り替える方法【エックスサーバーで簡単運用】サイトが攻撃で落ちた時に、別サーバーへすぐ切り替える方法【エックスサーバーで簡単運用】
ページ内スクロールで要素が変化する方法Intersection Observerで文字だけフェードインを作る方法|スクロールアニメの基本解説
横並びのサービスカード(3列)のレスポンシブ完全版横並びサービスカード(3列)の作り方|レスポンシブ完全対応のCSSサンプル付き

カテゴリー

  • 便利Tips (203)
    • 子テーマ・テーマカスタマイズ (27)
    • 固定ページ・デザイン (62)
    • 投稿管理・デザイン (10)
    • サイドバー・デザイン (9)
    • フッターデザイン (2)
    • Contact Form7 (2)
    • 管理画面 (19)
    • セキュリティ・アクセス制御 (15)
    • SEO・サイト運営サポート (41)
    • 不具合解決 (9)
  • 操作説明 (6)
  • HTMLタグ&CSS (29)
    • 基礎 (11)
    • 特殊文字 (2)
    • アクセシビリティ (5)
  • 用語集 (8)
  • おすすめプラグイン (8)
    • Contact Form 7 (4)
  • 番外編 (10)
    • 広告 (10)
      • Google AdSense (10)

ランダム記事

  • dl・dt・ddで作るTableタグ風の会社概要定義リストの作り方dl・dt・ddで作るTableタグ風の会社概要定義リストの作り方
  • おすすめ記事をショートコードで表示する方法人気記事ランキングをショートコードで表示する方法
  • コメント欄を完全に非表示にする方法(タイプ別に制御)コメント欄を完全に非表示にする方法(タイプ別に制御)
  • RSSにアイキャッチ画像と抜粋(PHP7+型宣言対応)を追加する方法RSSにアイキャッチ画像と抜粋(PHP7+型宣言対応)を追加する方法
  • IPアドレス自分のIPアドレスをショートコードで調べる方法

人気記事リスト

  • ログイン画面
    ワードプレスのログイン画面のロゴを変更する方法
  • 用語集(初心者向け)
    用語集(初心者向け)
  • 並び替え
    カテゴリーページで並べ替え(ソート)ができるボタンを作る方法
  • おすすめ記事をショートコードで表示する方法
    人気記事ランキングをショートコードで表示する方法
  • おすすめ記事をショートコードで表示する方法
    おすすめ記事をショートコードで表示する方法
  • SMAC
  • whois.domaintools.com
  • aguse.jp: ウェブ調査
  • SEOチェキ! 無料で使えるSEOツール
  • WordPress Theme Search
  • JPEGからPDFへ変換
  • PNGからWEBPへ変換
  • PNGへ変換
  • removebg
  • iloveimg(背景削除)
  • https://web.archive.org
  • Alfa-Tools

今日の運勢

※この記事には広告が含まれています。

※この記事には広告が含まれています。

  • ホーム
  • カテゴリー
  • 投稿一覧


お問い合わせ
お問い合わせ
  • ホーム
  • ご利用時の注意事項
  • カテゴリー別投稿一覧
  • カテゴリー説明付き一覧
  • プライバシーポリシーについて
  • お問い合わせ

Copyright © WordPressの今日から使える便利Tips All Rights Reserved.

Powered by WordPress & Lightning Theme by Vektor,Inc. technology.

MENU
  • ホーム
  • ご利用時の注意事項
  • カテゴリー別投稿一覧
  • カテゴリー説明付き一覧
  • プライバシーポリシーについて
  • お問い合わせ
Page生成時間:0.139秒