2026年5月20日
2026年5月20日
WordPressのユーザー活動ログを記録する方法
はじめに
複数の管理者・編集者がいるサイトでは、誰がいつ何を変更したかを記録する監査ログが重要です。不正アクセスの検知や誤操作の特定に役立ちます。
解決手順
ステップ1:WP Activity Logプラグインを使用する(推奨)
wp plugin install wp-security-audit-log --activate
管理画面 → WP Activity Log → 設定で記録するイベントを選択:
- ログイン・ログアウト
- 投稿・固定ページの変更
- プラグイン・テーマの変更
- ユーザーアカウントの変更
- WordPress設定の変更
ステップ2:コードでログイン履歴を記録する
// functions.php — ログイン・ログアウトをカスタムテーブルに記録
add_action('wp_login', function($user_login, $user) {
global $wpdb;
$wpdb->insert(
$wpdb->prefix . 'user_activity_log',
[
'user_id' => $user->ID,
'user_login' => $user_login,
'action' => 'login',
'ip_address' => $_SERVER['REMOTE_ADDR'] ?? '',
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
'created_at' => current_time('mysql'),
],
['%d', '%s', '%s', '%s', '%s', '%s']
);
}, 10, 2);
add_action('wp_logout', function($user_id) {
global $wpdb;
$wpdb->insert(
$wpdb->prefix . 'user_activity_log',
[
'user_id' => $user_id,
'action' => 'logout',
'ip_address' => $_SERVER['REMOTE_ADDR'] ?? '',
'created_at' => current_time('mysql'),
],
['%d', '%s', '%s', '%s']
);
});
ステップ3:ログテーブルを作成する
// functions.php または プラグイン有効化フック
function create_user_activity_log_table() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}user_activity_log (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
user_login VARCHAR(60),
action VARCHAR(50) NOT NULL,
ip_address VARCHAR(45),
user_agent TEXT,
created_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY user_id (user_id),
KEY created_at (created_at)
) $charset_collate;";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql);
}
register_activation_hook(__FILE__, 'create_user_activity_log_table');
ステップ4:投稿の変更もログに記録する
// functions.php — 投稿の保存・更新を記録
add_action('post_updated', function($post_id, $post_after, $post_before) {
if (wp_is_post_revision($post_id)) {
return;
}
$user = wp_get_current_user();
// error_log の代わりにカスタムテーブルへ書き込み可能
error_log(sprintf(
'[WP Activity] User %s (ID:%d) updated post ID:%d "%s"',
$user->user_login, $user->ID, $post_id, $post_after->post_title
));
}, 10, 3);
ステップ5:WP-CLIでログを確認する
# ログインログを直接DBで確認
wp db query "SELECT user_login, action, ip_address, created_at FROM wp_user_activity_log ORDER BY created_at DESC LIMIT 20;"
注意事項
- ログテーブルは定期的にクリーニングしてDBの肥大化を防いでください(90日以上のレコードを削除するcronが推奨)
- IPアドレスはGDPR上の個人データに該当する場合があります。必要に応じてプライバシーポリシーに記載してください
- ログイン失敗のログには
wp_login_failedフックを使用してください
まとめ
ユーザー活動ログには WP Activity Log プラグインが最も手軽です。コードで実装する場合は wp_login・wp_logout・post_updated フックを使い、カスタムテーブルに記録します。