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
導入手順
email-login-notifier
フォルダをwp-content/plugins/
に配置- 管理画面 → プラグイン → 「Email Login Notifier」を有効化
- 左メニュー「メール通知」から設定を開く
- メールアドレスを入力して通知をONにする
補足と応用アイデア
- 複数の通知先に送る場合はカンマ区切りのアドレス処理を追加
- HTMLメールに対応させて装飾を加える
- 管理者権限ユーザーのみに限定する条件分岐
- ログイン失敗通知(wp_login_failed)にも対応可能
まとめ
ログイン通知は、サイトの安全性を高めるだけでなく、運用者が状況を把握するための有効な手段です。
このプラグインは、通知先やON/OFFが管理画面から設定できるため、さまざまな運用体制に柔軟に対応できます。
シンプルかつ拡張性の高い構成なので、自分の運用環境に合わせてぜひカスタマイズしてみてください。
コメント