記錄使用者登錄 這簡單的功能 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>