wordpress 線上即時流量

這段代碼創建了一個 get_online_visitors 函數,用於計算和顯示當前在線訪客人數,並將此功能以短碼 在線:36 人 方式顯示在 WordPress 頁面或文章中。以下是程式碼的各部分說明:

  1. 設置過期時間$expire_time = 300; 表示將在線訪客的存放時間設為 5 分鐘。
  2. 取得當前時間$current_time = current_time('timestamp'); 取得當前時間的 Unix 時間戳,與存儲的訪客時間戳進行比較,以確定哪些訪客已過期。
  3. 訪客數據存取:使用 WordPress 的 Transients API 函數 get_transient 來獲取訪客數據,並預設為空的陣列。
  4. 移除過期的訪客:使用 foreach 迴圈,檢查每個訪客的 IP 和紀錄時間,若當前時間減去紀錄時間超過 $expire_time,則將該訪客移除。
  5. 紀錄當前訪客:取得當前訪客的 IP,並以 $_SERVER['REMOTE_ADDR'] 保存至 $visitors 陣列中,將 IP 作為鍵值,當前時間戳作為值。
  6. 更新訪客數據:使用 set_transient 函數保存更新後的訪客數據。
  7. 返回在線人數:透過 count($visitors) 返回在線人數。
  8. 創建短碼visitor_shortcode 函數透過 get_online_visitors() 函數取得在線人數,並返回「在線:X 人」,使其在 WordPress 短碼 在線:36 人 中顯示。

這樣設計後,只需在 WordPress 頁面或文章中插入 在線:36 人 短碼,即可顯示當前的在線人數。

function get_online_visitors() {

    $expire_time = 300; 
    $current_time = current_time('timestamp');
    $visitors = get_transient('online_visitors') ?: array();
    
    foreach ($visitors as $ip => $timestamp) {
        if (($current_time - $timestamp) > $expire_time) {
            unset($visitors[$ip]);
        }
    }
    

    $user_ip = $_SERVER['REMOTE_ADDR'];
    $visitors[$user_ip] = $current_time;
    
    set_transient('online_visitors', $visitors, $expire_time);
    
    return count($visitors);
}

function visitor_shortcode() {
    $online_visitors = get_online_visitors();
    return "在線:{$online_visitors} 人";
}
add_shortcode('visitor', 'visitor_shortcode');