オンラインユーザー数をショートコードで表示する方法

このページでは、「現在オンライン中のユーザー数」を表示できるショートコードを作成します。

1 実装のポイント

  • アクセス時にユーザーのIPアドレスと時刻を記録します。
  • 一定時間内(例:5分以内)にアクセスしたユーザーを「オンライン」とみなします。

2 functions.php にコードを追加


/* ---------------------------------------
 * HOME と投稿ページでオンライン人数を表示
 * --------------------------------------- */
function show_online_users() {
    // HOMEまたは投稿ページでのみ実行
    if ( !is_front_page() && !is_single() ) return '';

    $transient_key = 'online_users_list';
    $timeout = 5 * MINUTE_IN_SECONDS; // 5分以内をオンラインとみなす
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $current_time = time();

    // 現在のオンラインリストを取得
    $online_users = get_transient($transient_key);
    if ( !is_array($online_users) ) {
        $online_users = [];
    }

    // 自分のアクセスを記録
    $online_users[$user_ip] = $current_time;

    // タイムアウトしたユーザーを削除
    foreach ( $online_users as $ip => $timestamp ) {
        if ( ($current_time - $timestamp) > $timeout ) {
            unset($online_users[$ip]);
        }
    }

    // 更新データを保存
    set_transient($transient_key, $online_users, $timeout);

    $count = count($online_users);

    return '<div class="online-users-count">現在のオンラインユーザー数:<strong>' . $count . '</strong> 人</div>';
}
add_shortcode('online_users', 'show_online_users');
補足:
ウィジェットや各ページでショートコード [online_users] と記述すると、現在オンラインのユーザー数が表示されます。

ウィジェット、記事内で表示する場合:


[online_users]
  

3 完成イメージ

現在のオンラインユーザー数:1

4 代用プラグイン

同様の機能をプラグインで実装したい場合は、以下のようなプラグインでも可能です:

  • WP UserOnline(ユーザーごとのアクセスをリアルタイムで表示)
  • Who’s Online(訪問中のユーザーをリスト表示可能)

ただし、今回のコードはサーバー負荷を抑えつつ「シンプルにカウント表示」することを目的にしています。

5 まとめ

このショートコードを使えば、現在のオンラインユーザー数を動的に表示できます。「簡易的なアクセス状況を知りたい」という場合におすすめです。