複数ユーザー運営時に、ログイン中のユーザーを一覧に表示する方法

Cocoonカスタマイズ集
この記事は約3分で読めます。
記事内に広告が含まれています。

はじめに

管理者として、「誰が最後にいつログインしたのか」を把握したい場面は多くあります。
しかし、WordPressの標準ユーザー一覧画面では、ログイン状況を直接確認することはできません。

そこで、管理者の場合、管理画面の「ユーザー一覧」に「ログイン中」の状態を表示します。

この記事では、この方法について説明します。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。

// ログイン時にログアウト時刻を削除
add_action('wp_login', function ($user_login, $user) {
  if ($user && isset($user->ID)) {
    delete_user_meta($user->ID, 'my_last_logout');
  }
}, 10, 2);


// ログアウト時にユーザーIDと時刻を保存
add_action('clear_auth_cookie', function () {
  $user = wp_get_current_user();
  if ($user && $user->ID) {
    update_user_meta($user->ID, 'my_last_logout', time());
  }
});


// 管理画面一覧にカラムを追加
add_filter('manage_users_columns', function ($columns) {
  if (current_user_can('administrator')) {
    $columns['is_logged_in'] = 'ログイン中';
  }

  return $columns;
});


// 管理画面一覧のカラムにデータを表示
add_action('manage_users_custom_column', function ($value, $column_name, $user_id) {
  if ($column_name !== 'is_logged_in') {
    return $value;
  }

  if (is_user_logged_in_now($user_id)) {
    return '<span style="color:red;">●</span>';
  }

  return $value;
}, 10, 3);


/**
 * 指定ユーザーが現在ログイン中かどうかを判定
 *
 * @param int $user_id 判定対象のユーザーID
 * @return bool ログアウト時刻が記録されていなければtrue
 */
if (!function_exists('is_user_logged_in_now')):
function is_user_logged_in_now($user_id) {
  $last_logout = get_user_meta($user_id, 'my_last_logout', true);

  // ログアウト時刻の有無からログイン状態を判定
  return empty($last_logout);
}
endif;

さいごに

今回紹介した方法を使えば、WordPressの管理画面ユーザー一覧に現在ログイン中のユーザーを表示でき、サイト運営やユーザー管理が効率的になります。
スタッフや会員のログイン状況を簡単に把握したい管理者にとって便利な機能です。

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