WordPressログインをChatworkに通知するプラグインの作り方

WordPressを複数人で運用していると、誰が・いつ・どのサイトにログインしたのかを把握することが重要になります。
今回は、WordPressのログイン通知をChatworkへ自動で送信するオリジナルプラグインを作成する方法をご紹介します。

Chatworkを日常的に使っているチームであれば、Slackやメールよりも通知の導線としてスムーズに活用できるケースも多いでしょう。


機能の概要

このプラグインでは以下の機能を実装しています。

  • WordPressへのログインを検知し、Chatworkへ通知を送信
  • 通知内容に、ログインユーザー名・権限・日時・IPアドレス・サイト名を含める
  • 管理画面から、通知機能のON/OFF・Chatworkトークン・ルームIDを設定可能
  • 独立したメニューから設定ページへアクセスできる

事前準備(Chatwork側)

  1. APIトークンを取得
  2. 通知を送りたいChatworkのグループチャットにアクセスし、URLからルームIDを確認

プラグインの構成

以下の構成でプラグインを作成します。

wp-content/
└── plugins/
    └── chatwork-login-notifier/
        ├── chatwork-login-notifier.php     ← メインファイル
        └── includes/
            └── settings.php                ← 管理画面UI

プラグイン本体:chatwork-login-notifier.php

このファイルには、ログイン時のChatwork通知処理が含まれます。

<?php
/**
 * Plugin Name: Chatwork Login Notifier
 * Description: ユーザーログイン時にChatworkへ通知するプラグイン
 */

defined('ABSPATH') || exit;

require_once plugin_dir_path(__FILE__) . 'includes/settings.php';

add_action('wp_login', 'chatwork_notify_on_login', 10, 2);

function chatwork_notify_on_login($user_login, $user) {
    $enabled = get_option('cwn_notify_enabled');
    $token   = get_option('cwn_chatwork_token');
    $room_id = get_option('cwn_chatwork_room_id');

    if ($enabled !== '1' || empty($token) || empty($room_id)) return;

    $site_name = get_bloginfo('name');
    $site_url  = home_url();
    $ip_address = $_SERVER['REMOTE_ADDR'];
    $login_time = current_time('mysql');
    $roles = implode(', ', $user->roles);

    $message = "[info][title]ユーザーログイン通知[/title]"
             . "■ サイト: {$site_name} ({$site_url})\n"
             . "■ ユーザー名: {$user_login}\n"
             . "■ 権限: {$roles}\n"
             . "■ ログイン日時: {$login_time}\n"
             . "■ IPアドレス: {$ip_address}"
             . "[/info]";

    $endpoint = "https://api.chatwork.com/v2/rooms/{$room_id}/messages";
    $args = [
        'headers' => ['X-ChatWorkToken' => $token],
        'body'    => ['body' => $message],
    ];

    wp_remote_post($endpoint, $args);
}

管理画面設定:includes/settings.php

このファイルで、Chatwork連携に必要な設定項目を管理画面に表示します。

<?php
defined('ABSPATH') || exit;

add_action('admin_menu', function () {
    add_menu_page(
        'Chatwork通知設定',
        'Chatwork通知',
        'manage_options',
        'chatwork-login-notifier',
        'cwn_settings_page',
        'dashicons-format-chat',
        80
    );
});

add_action('admin_init', function () {
    register_setting('cwn_settings_group', 'cwn_notify_enabled');
    register_setting('cwn_settings_group', 'cwn_chatwork_token');
    register_setting('cwn_settings_group', 'cwn_chatwork_room_id');
});

function cwn_settings_page() {
    ?>
    <div class="wrap">
        <h1>Chatwork ログイン通知 設定</h1>
        <form method="post" action="options.php">
            <?php settings_fields('cwn_settings_group'); ?>
            <table class="form-table">
                <tr>
                    <th scope="row">通知機能を有効にする</th>
                    <td><input type="checkbox" name="cwn_notify_enabled" value="1" <?php checked(get_option('cwn_notify_enabled'), '1'); ?> /></td>
                </tr>
                <tr>
                    <th scope="row">Chatwork APIトークン</th>
                    <td><input type="text" name="cwn_chatwork_token" value="<?php echo esc_attr(get_option('cwn_chatwork_token')); ?>" class="regular-text" /></td>
                </tr>
                <tr>
                    <th scope="row">ルームID</th>
                    <td><input type="text" name="cwn_chatwork_room_id" value="<?php echo esc_attr(get_option('cwn_chatwork_room_id')); ?>" class="regular-text" /></td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

導入方法

  1. chatwork-login-notifier フォルダを wp-content/plugins/ に配置
  2. WordPress管理画面からプラグインを有効化
  3. 左側メニューに「Chatwork通知」が表示される
  4. APIトークン・ルームIDを入力し、「通知機能を有効」にチェックを入れて保存

通知例(Chatwork)

[info][title]ユーザーログイン通知[/title]
■ サイト: Example Site (https://example.com)
■ ユーザー名: admin_user
■ 権限: administrator
■ ログイン日時: 2025-06-04 01:40:33
■ IPアドレス: 123.123.123.123
[/info]

まとめ

このように、Chatwork通知機能をプラグインとして切り出すことで、再利用性・保守性が大幅に向上します。運用中の複数サイトに対しても同様の仕組みを導入でき、セキュリティ強化・運用監視の効率化に役立ちます。

カスタマイズ例として、通知対象の権限を制限したり、ログ保存機能を追加することも可能です。
チームの運用スタイルに合わせて柔軟に調整していきましょう。

コメント

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