WordPressログインをSlackに通知するオリジナルプラグインの作り方

WordPressを複数人で運用していると、誰が・いつログインしたのかをSlackで即時に把握したい場面があると思います。
今回は、ユーザーのログインを検知してSlackに通知するオリジナルプラグインを作成する方法をご紹介します。

通知先や機能のON/OFFは管理画面から設定できるため、運用中のサイトにも手軽に導入できます。


機能の概要

このプラグインでは以下のことが可能です:

  • WordPressにユーザーがログインした際、Slackへ自動で通知を送信
  • 通知にはサイト名・URL・ユーザー名・権限・ログイン時刻・IPアドレスを含める
  • 通知先Webhook URLと通知機能ON/OFFを管理画面で設定可能
  • プラグイン専用の設定メニューを左メニューに独立表示

事前準備(Slack側)

Slack通知には Incoming Webhook を利用します。

  1. Slackのワークスペースで「Incoming Webhook」アプリを追加
  2. 任意のチャンネルにWebhook URLを作成
  3. 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
}

導入手順

  1. 上記ファイルを slack-login-notifier フォルダに配置し、wp-content/plugins/ に設置
  2. WordPress管理画面 → プラグイン → 「Slack Login Notifier」を有効化
  3. 左側メニューに「Slack通知」が表示される
  4. 通知機能を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通知は有効な監視手段です。

このように、簡単な構成で自作プラグインとして管理できるので、運用チームの環境に合わせて柔軟にカスタマイズしてみてください。

コメント

タイトルとURLをコピーしました