WordPressを複数人で運用していると、誰が・いつログインしたのかをSlackで即時に把握したい場面があると思います。
今回は、ユーザーのログインを検知してSlackに通知するオリジナルプラグインを作成する方法をご紹介します。
通知先や機能のON/OFFは管理画面から設定できるため、運用中のサイトにも手軽に導入できます。
機能の概要
このプラグインでは以下のことが可能です:
- WordPressにユーザーがログインした際、Slackへ自動で通知を送信
- 通知にはサイト名・URL・ユーザー名・権限・ログイン時刻・IPアドレスを含める
- 通知先Webhook URLと通知機能ON/OFFを管理画面で設定可能
- プラグイン専用の設定メニューを左メニューに独立表示
事前準備(Slack側)
Slack通知には Incoming Webhook を利用します。
- Slackのワークスペースで「Incoming Webhook」アプリを追加
- 任意のチャンネルにWebhook URLを作成
- URLを控えておく(例:
https://hooks.slack.com/services/XXX/XXX/XXX
)
プラグインの構成
以下の構成でプラグインを作成します。
wp-content/
└── plugins/
└── slack-login-notifier/
├── slack-login-notifier.php ← プラグイン本体
└── includes/
└── settings.php ← 管理画面用設定ファイル
プラグイン本体:slack-login-notifier.php
<?php
/**
* Plugin Name: Slack Login Notifier
* Description: WordPressログイン時にSlackへ通知するプラグイン
* Version: 1.0.0
* Author: Your Name
*/
defined('ABSPATH') || exit;
require_once plugin_dir_path(__FILE__) . 'includes/settings.php';
add_action('wp_login', 'slack_notify_on_login', 10, 2);
function slack_notify_on_login($user_login, $user) {
$enabled = get_option('sln_notify_enabled');
$webhook_url = get_option('sln_slack_webhook_url');
if ($enabled !== '1' || empty($webhook_url)) return;
$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}`";
$payload = json_encode(['text' => $text]);
$args = [
'headers' => ['Content-Type' => 'application/json'],
'body' => $payload,
];
wp_remote_post($webhook_url, $args);
}
管理画面設定:includes/settings.php
<?php
defined('ABSPATH') || exit;
add_action('admin_menu', function () {
add_menu_page(
'Slack通知設定',
'Slack通知',
'manage_options',
'slack-login-notifier',
'sln_settings_page',
'dashicons-share',
81
);
});
add_action('admin_init', function () {
register_setting('sln_settings_group', 'sln_notify_enabled');
register_setting('sln_settings_group', 'sln_slack_webhook_url');
});
function sln_settings_page() {
?>
<div class="wrap">
<h1>Slack ログイン通知 設定</h1>
<form method="post" action="options.php">
<?php settings_fields('sln_settings_group'); ?>
<table class="form-table">
<tr>
<th scope="row">通知機能を有効にする</th>
<td>
<input type="checkbox" name="sln_notify_enabled" value="1" <?php checked(get_option('sln_notify_enabled'), '1'); ?> />
</td>
</tr>
<tr>
<th scope="row">Slack Webhook URL</th>
<td>
<input type="text" name="sln_slack_webhook_url" value="<?php echo esc_attr(get_option('sln_slack_webhook_url')); ?>" class="regular-text" />
<p class="description">SlackのIncoming Webhook URLを入力してください</p>
</td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}
導入手順
- 上記ファイルを
slack-login-notifier
フォルダに配置し、wp-content/plugins/
に設置 - WordPress管理画面 → プラグイン → 「Slack Login Notifier」を有効化
- 左側メニューに「Slack通知」が表示される
- 通知機能をONにし、Webhook URLを入力して保存
通知の例(Slackでの表示)
ユーザーログイン通知
* サイト: Sample Site (https://example.com)
* ユーザー名: admin
* 権限: administrator
* ログイン日時: 2025-06-04 01:50:00
* IPアドレス: 123.123.123.123
応用アイデア
- 通知対象のユーザーロールを制限(例:管理者のみ)
- ログイン失敗時(wp_login_failed)の通知を追加
- 通知に端末情報やブラウザ情報を含める
まとめ
WordPressとSlackを連携させることで、ログイン状況の可視化やセキュリティ強化が実現できます。
特に複数人での運用や保守が必要なWebサイトにおいて、Slack通知は有効な監視手段です。
このように、簡単な構成で自作プラグインとして管理できるので、運用チームの環境に合わせて柔軟にカスタマイズしてみてください。
コメント