複数のWebサイトを運用していると、それぞれのWordPressに誰が・いつログインしたのか把握するのが難しくなることがあります。特に管理者アカウントへの不正アクセス対策や、運用チーム間の連携を強化したい場合は、ログイン情報を外部に通知する仕組みが有効です。
この記事では、WordPressにログインがあった際に、Chatworkへ通知を送る方法をご紹介します。
目的
- WordPressログイン時の情報(ユーザー名・権限・IP・日時)をChatworkに自動通知
- サイト名・URLもメッセージに含め、複数サイト運用時でも判別しやすくする
前提条件
以下が整っていれば導入可能です。
- Chatworkのアカウントを保有している
- ChatworkのAPIトークンを取得済み
- 通知を送りたいChatworkグループチャットのルームIDが分かっている
実装内容
以下のコードを、functions.php
または独自プラグイン内に追加します。
add_action('wp_login', 'notify_chatwork_on_login', 10, 2);
function notify_chatwork_on_login($user_login, $user) {
// Chatwork API設定
$api_token = 'YOUR_CHATWORK_API_TOKEN'; // ← APIトークンを入力
$room_id = '123456789'; // ← 通知先チャットのIDを入力
// サイト情報
$site_name = get_bloginfo('name');
$site_url = home_url();
// ログイン情報
$ip_address = $_SERVER['REMOTE_ADDR'];
$login_time = current_time('mysql');
$roles = implode(', ', $user->roles);
// Chatwork通知メッセージ
$message = "[info][title]ユーザーログイン通知[/title]"
. "■ サイト: {$site_name} ({$site_url})\n"
. "■ ユーザー名: {$user_login}\n"
. "■ 権限: {$roles}\n"
. "■ ログイン日時: {$login_time}\n"
. "■ IPアドレス: {$ip_address}"
. "[/info]";
// Chatwork APIにPOST送信
$endpoint = "https://api.chatwork.com/v2/rooms/{$room_id}/messages";
$args = [
'headers' => [
'X-ChatWorkToken' => $api_token,
],
'body' => [
'body' => $message,
],
];
wp_remote_post($endpoint, $args);
}
通知される情報
Chatworkでは以下のような形式で通知されます。
[info][title]ユーザーログイン通知[/title]
■ サイト: サンプルサイト (https://example.com)
■ ユーザー名: takuofukao
■ 権限: administrator
■ ログイン日時: 2025-06-04 00:51:22
■ IPアドレス: 123.123.123.123
[/info]
セキュリティ・運用上の注意点
- APIトークンは絶対に公開しないでください。
.env
や設定ファイルなどで外部管理すると安全です。 - IPアドレスがCDNやWAFの影響で取得できない場合は、
HTTP_X_FORWARDED_FOR
を補完として利用することも検討できます。 - 通知の頻度が多くなりすぎる場合は、フィルタを使って特定のロールのみ通知したり、通知間隔を制限する処理も追加可能です。
応用アイデア
- ログイン失敗時(
wp_login_failed
)の通知追加 - 管理者のみ通知対象にする
- Slackなど他のサービスにも対応可能(通知送信部分の変更で実現)
まとめ
このカスタマイズを導入することで、WordPressのログイン状況をリアルタイムにChatworkで把握できるようになります。複数サイトを管理している場合や、セキュリティ監視を強化したいチームにとって、手軽で有効な方法です。
コメント