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

WordPressを安全に運用するうえで、誰がいつログインしたのかを把握できる仕組みがあると便利です。
今回は、ユーザーのログイン時に管理者など任意のメールアドレスに通知を送信するWordPressプラグインを、自作して導入する方法をご紹介します。

管理画面から通知のON/OFFや通知先メールアドレスを設定できるので、汎用的に使える構成になっています。


機能概要

このプラグインは以下のような機能を提供します。

  • WordPressログイン成功時に通知をメールで送信
  • 通知内容には、サイト名・URL・ユーザー名・権限・ログイン時刻・IPアドレスを含む
  • 通知先メールアドレスとON/OFF切り替えを管理画面から設定可能
  • プラグイン専用のメニューが管理画面に追加される

プラグイン構成

以下のような2ファイル構成で作成します。

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

メイン処理:email-login-notifier.php

<?php
/**
 * Plugin Name: Email Login Notifier
 * Description: WordPressログイン時にメールで通知を送るプラグイン
 * Version: 1.0.0
 * Author: Your Name
 */

defined('ABSPATH') || exit;

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

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

function eln_notify_on_login($user_login, $user) {
    $enabled = get_option('eln_notify_enabled');
    $email   = get_option('eln_notify_email');

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

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

    $subject = "[{$site_name}] ログイン通知: {$user_login}";
    $message = <<<EOD
以下のユーザーがログインしました。

■ サイト: {$site_name}
■ URL: {$site_url}
■ ユーザー名: {$user_login}
■ 権限: {$roles}
■ ログイン日時: {$login_time}
■ IPアドレス: {$ip_address}
EOD;

    wp_mail($email, $subject, $message);
}

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

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

add_action('admin_menu', function () {
    add_menu_page(
        'メール通知設定',
        'メール通知',
        'manage_options',
        'email-login-notifier',
        'eln_settings_page',
        'dashicons-email-alt',
        82
    );
});

add_action('admin_init', function () {
    register_setting('eln_settings_group', 'eln_notify_enabled');
    register_setting('eln_settings_group', 'eln_notify_email');
});

function eln_settings_page() {
    ?>
    <div class="wrap">
        <h1>メールログイン通知 設定</h1>
        <form method="post" action="options.php">
            <?php settings_fields('eln_settings_group'); ?>
            <table class="form-table">
                <tr>
                    <th scope="row">通知機能を有効にする</th>
                    <td>
                        <input type="checkbox" name="eln_notify_enabled" value="1" <?php checked(get_option('eln_notify_enabled'), '1'); ?> />
                    </td>
                </tr>
                <tr>
                    <th scope="row">通知先メールアドレス</th>
                    <td>
                        <input type="email" name="eln_notify_email" value="<?php echo esc_attr(get_option('eln_notify_email')); ?>" class="regular-text" />
                        <p class="description">通知を受け取るメールアドレスを入力してください</p>
                    </td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

通知メールの例

以下のユーザーがログインしました。

■ サイト: Example Site
■ URL: https://example.com
■ ユーザー名: admin_user
■ 権限: administrator
■ ログイン日時: 2025-06-04 02:00:00
■ IPアドレス: 123.123.123.123

導入手順

  1. email-login-notifier フォルダを wp-content/plugins/ に配置
  2. 管理画面 → プラグイン → 「Email Login Notifier」を有効化
  3. 左メニュー「メール通知」から設定を開く
  4. メールアドレスを入力して通知をONにする

補足と応用アイデア

  • 複数の通知先に送る場合はカンマ区切りのアドレス処理を追加
  • HTMLメールに対応させて装飾を加える
  • 管理者権限ユーザーのみに限定する条件分岐
  • ログイン失敗通知(wp_login_failed)にも対応可能

まとめ

ログイン通知は、サイトの安全性を高めるだけでなく、運用者が状況を把握するための有効な手段です。
このプラグインは、通知先やON/OFFが管理画面から設定できるため、さまざまな運用体制に柔軟に対応できます。

シンプルかつ拡張性の高い構成なので、自分の運用環境に合わせてぜひカスタマイズしてみてください。

コメント

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