WordPressを複数人で運用している場合、誰がいつログインしたかを把握しておくことは、セキュリティ面でも管理面でも非常に重要です。
今回は、WordPressでユーザーがログインした際に、管理者に自動でメール通知が届くようにするカスタマイズ方法をご紹介します。
機能概要
このカスタマイズを導入することで、以下の情報がメールで送られるようになります。
- ログインしたユーザー名
- そのユーザーの権限(administrator、editorなど)
- ログイン日時
- IPアドレス
- サイト名・URL
実装方法
以下のコードを、テーマの functions.php
または独自プラグイン内に追加します。
add_action('wp_login', 'notify_admin_on_login', 10, 2);
function notify_admin_on_login($user_login, $user) {
$to = get_option('admin_email');
$site_name = get_bloginfo('name');
$site_url = home_url();
$ip_address = $_SERVER['REMOTE_ADDR'];
$login_time = current_time('mysql');
$roles = implode(', ', $user->roles);
$subject = "[{$site_name}] ログイン通知: {$user_login}";
$message = <<<EOD
以下のユーザーがログインしました。
■ サイト: {$site_name}
■ URL: {$site_url}
■ ユーザー名: {$user_login}
■ 権限: {$roles}
■ ログイン日時: {$login_time}
■ IPアドレス: {$ip_address}
EOD;
wp_mail($to, $subject, $message);
}
通知の例(メール本文)
以下のユーザーがログインしました。
■ サイト: サンプルサイト
■ URL: https://example.com
■ ユーザー名: takuofukao
■ 権限: administrator
■ ログイン日時: 2025-06-04 01:25:00
■ IPアドレス: 123.123.123.123
注意点と補足
- 管理者メールアドレスは「設定」→「一般設定」で変更可能です。
- メール送信には WordPress の
wp_mail()
関数を使用しています。 - サーバーがメール送信できるように設定されている必要があります(sendmail、SMTPなど)
- IPアドレスは
$_SERVER['REMOTE_ADDR']
から取得しています。CDNやプロキシ利用時はHTTP_X_FORWARDED_FOR
なども考慮する必要があります。
応用のアイデア
- 管理者だけでなく特定のロールに対して通知対象を制限する
- 通知内容をHTML形式にする
- ログイン失敗時の通知(
wp_login_failed
)も追加して監視を強化
まとめ
WordPressにおけるログイン通知の自動化は、システム監視とセキュリティ強化に大きく貢献します。メール通知は最も導入しやすく、すぐに実用化できる手段の一つです。
必要に応じてSlack連携やChatwork通知と組み合わせることで、管理体制の一元化も可能です。運用スタイルにあわせてぜひ導入をご検討ください。
コメント