複数のWordPressサイトを管理していると、それぞれのログイン状況をリアルタイムで把握するのは容易ではありません。
特に、複数人で運用しているチームサイトや、セキュリティ意識の高い運用環境では、ログイン通知をSlackに送る仕組みを導入することで、不正アクセスへの早期対応やチーム内での可視化が可能になります。
今回は、WordPressでユーザーがログインした際にSlackに通知するカスタマイズ方法をご紹介します。
機能の概要
- WordPressにユーザーがログインしたタイミングで、Slackの指定チャンネルに通知を送信
- 通知内容には以下を含む:
- サイト名・URL
- ユーザー名
- ユーザーの権限(ロール)
- ログイン日時
- アクセス元のIPアドレス
事前準備(Slack側の設定)
- Slackにログイン
- 通知を送りたいチャンネルを開く
- 以下のアプリを追加:
Incoming Webhook - Webhook URLを発行(後でコードに貼り付け)
実装手順(functions.phpに追加)
以下のコードを、使用中のテーマの functions.php
もしくは独自プラグイン内に追加します:
add_action('wp_login', 'notify_slack_on_login', 10, 2);
function notify_slack_on_login($user_login, $user) {
// Slack Webhook URL(発行したURLに差し替え)
$webhook_url = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXX';
// サイト情報
$site_name = get_bloginfo('name');
$site_url = home_url();
// ユーザー情報
$ip_address = $_SERVER['REMOTE_ADDR'];
$login_time = current_time('mysql');
$roles = implode(', ', $user->roles);
// 通知メッセージ内容
$text = "*ユーザーログイン通知*\n"
. "• サイト: {$site_name} ({$site_url})\n"
. "• ユーザー名: `{$user_login}`\n"
. "• 権限: `{$roles}`\n"
. "• ログイン日時: `{$login_time}`\n"
. "• IPアドレス: `{$ip_address}`";
// Slackへ送信
$payload = json_encode(['text' => $text]);
$args = [
'headers' => ['Content-Type' => 'application/json'],
'body' => $payload,
];
wp_remote_post($webhook_url, $args);
}
通知例(Slackでの表示)
ユーザーログイン通知
* サイト: サンプルサイト (https://example.com)
* ユーザー名: takuofukao
* 権限: administrator
* ログイン日時: 2025-06-04 01:10:00
* IPアドレス: 123.123.123.123
セキュリティ・運用上の注意点
- Webhook URL はトークンと同等の扱い。ソースコードをGitなどで共有する際は絶対に漏洩しないように注意しましょう。
- IPアドレスは REMOTE_ADDR を取得していますが、CDNやプロキシ環境では HTTP_X_FORWARDED_FOR の考慮も必要です。
- 通知が過剰になる場合は、管理者のみ通知するような条件追加や、1ユーザーにつき1日1回制限なども検討できます。
応用アイデア
- ログイン失敗時(wp_login_failed)も通知対象に追加
- 複数サイトでWebhook URLを切り替える
- 通知をHTML整形されたメールとして送信する処理に転用
まとめ
このカスタマイズを導入することで、WordPressの管理チームにとってログイン状況の把握が格段にしやすくなります。
セキュリティ強化はもちろん、誰がいつ作業を行っているかの記録としても便利です。
Slack連携は簡単に始められる割に大きな効果があるので、ぜひ導入をご検討ください。
コメント