WordPress 如何記錄使用者登錄的 IP 跟時間方便未來分析使用

記錄使用者登錄 這簡單的功能 wordpress 隨便都有一堆外掛可用。我這邊介紹的是最簡單方便,不用安裝外掛單一 function 程式幾乎不影響效能。

<?php

function log_successful_login_info($user_login, $user) {
    // 取得 IP:優先 HTTP_X_FORWARDED_FOR,再用 REMOTE_ADDR
    $ip_raw = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'UNKNOWN';
    $ip = explode(',', $ip_raw)[0]; // 若有多個 IP,取第一個

    $time = current_time('mysql'); // WordPress 時區格式

    $log_entry = sprintf(
        "[%s] 使用者:%s | IP:%s\n",
        $time,
        sanitize_text_field($user_login),
        sanitize_text_field($ip)
    );

    $log_file = WP_CONTENT_DIR . '/login_log.txt';
    file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX);
}
add_action('wp_login', 'log_successful_login_info', 10, 2);

把上面的程式貼到子主題的 function.php 裡即可。如未啟用子主題的可在 wp-content\mu-plugins 建立1個 login-logger.php 檔案。然後把下方程式貼進去存檔

<?php
/**
 * Plugin Name: Login Logger
 * Description: 紀錄登入成功的使用者帳號、IP(HTTP_X_FORWARDED_FOR 或 REMOTE_ADDR)與登入時間。
 * Author: Matthew Wang
 */

function log_successful_login_info($user_login, $user) {
    // 取得 IP:優先 HTTP_X_FORWARDED_FOR,再用 REMOTE_ADDR
    $ip_raw = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'UNKNOWN';
    $ip = explode(',', $ip_raw)[0]; // 若有多個 IP,取第一個

    $time = current_time('mysql'); // WordPress 時區格式

    $log_entry = sprintf(
        "[%s] 使用者:%s | IP:%s\n",
        $time,
        sanitize_text_field($user_login),
        sanitize_text_field($ip)
    );

    $log_file = WP_CONTENT_DIR . '/login_log.txt';
    file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX);
}
add_action('wp_login', 'log_successful_login_info', 10, 2);

由於文字檔是寫在 wp-content 裡。這邊建議在 .htaccess 加上下方程式阻擋由 web 讀取

<Files login_log.txt>
order deny,allow
deny from all
</Files>

延伸閱讀

blog.ocam.live
blog.ocam.live

關注科技新聞、SEO、人工智慧、電玩模擬器、程式設言、與 IT 日常等議題,深入簡出文章的說明並持續追蹤相關新聞的發展與報導。