Vor größeren Updates kann es sinnvoll sein zu prüfen, ob gerade eingeloggte Benutzer auf der Website aktiv sind – besonders bei WooCommerce-Shops, in denen Kunden oder Mitarbeiter Warenkörbe vorbereiten oder Bestellungen zusammenstellen.
Dieses Snippet zeigt im WordPress-Dashboard, welche eingeloggten Benutzer in den letzten 30 Minuten im Frontend aktiv waren.
Was das Snippet macht
- erfasst alle eingeloggten Benutzer im Frontend
- speichert nur den Zeitpunkt der letzten Aktivität
- keine IP-Adressen
- keine besuchten Seiten oder Aktionen
- keine Historie
- der eigene Benutzer wird in der Anzeige ausgeblendet
- Anzeige direkt im WordPress-Dashboard
Das Snippet ist als temporäres Werkzeug gedacht: vor Updates aktivieren, einige Minuten beobachten und danach wieder deaktivieren.
Anzeige im Dashboard
Unter Dashboard → Startseite erscheint ein Widget mit dem Titel Aktive Benutzer.
- 🔴 Aktivität innerhalb der letzten 10 Minuten
- 🟡 Aktivität innerhalb der letzten 30 Minuten
- 🟢 Niemand in den letzten 30 Minuten aktiv
Wichtig
Direkt nach dem Aktivieren kennt das Snippet nur neue Aktivitäten. War ein Benutzer bereits vorher eingeloggt und hat gerade eine Seite offen, erscheint er erst beim nächsten Seitenaufruf.
Deshalb nach dem Aktivieren am besten 10 bis 15 Minuten warten, bevor Updates gestartet werden.
Snippet
<?php
/**
* Aktive eingeloggte Benutzer anzeigen
*
* Zweck:
* Vor Updates kurz prüfen, ob gerade ein eingeloggter Benutzer
* auf der Website aktiv ist.
*
* - erfasst alle eingeloggten Benutzer im Frontend
* - eigener Benutzer wird nicht angezeigt
* - keine IPs, URLs oder Aktionen
* - keine Historie
* - Anzeige im WP-Dashboard
*/
defined( 'ABSPATH' ) || exit;
/* =========================================================
* 1. Aktivität eingeloggter Benutzer erfassen
* ========================================================= */
add_action( 'wp', function () {
// Nur Frontend und nur eingeloggte Benutzer.
if ( is_admin() || ! is_user_logged_in() ) {
return;
}
$user_id = get_current_user_id();
if ( ! $user_id ) {
return;
}
update_user_meta(
$user_id,
'_image2_last_frontend_activity',
time()
);
});
/* =========================================================
* 2. Dashboard-Widget
* ========================================================= */
add_action( 'wp_dashboard_setup', function () {
wp_add_dashboard_widget(
'image2_active_users',
'Aktive Benutzer',
'image2_active_users_dashboard'
);
});
function image2_active_users_dashboard() {
$current_user_id = get_current_user_id();
$now = time();
// Wir interessieren uns nur für die letzten 30 Minuten.
$cutoff = $now - ( 30 * MINUTE_IN_SECONDS );
$users = get_users( [
'meta_key' => '_image2_last_frontend_activity',
'meta_value' => $cutoff,
'meta_compare' => '>=',
'meta_type' => 'NUMERIC',
'exclude' => [ $current_user_id ],
'orderby' => 'meta_value_num',
'order' => 'DESC',
] );
if ( empty( $users ) ) {
echo '<p style="font-size:16px;margin:8px 0;">
🟢 <strong>Niemand in den letzten 30 Minuten aktiv.</strong>
</p>';
echo '<p style="margin-bottom:0;color:#646970;">
Sieht nach einem guten Zeitpunkt für Updates aus.
</p>';
return;
}
echo '<p style="margin-top:0;">
Folgende eingeloggte Benutzer waren kürzlich im Frontend aktiv:
</p>';
echo '<table style="width:100%;border-collapse:collapse;">';
foreach ( $users as $user ) {
$last_activity = (int) get_user_meta(
$user->ID,
'_image2_last_frontend_activity',
true
);
$seconds = max( 0, $now - $last_activity );
$minutes = floor( $seconds / 60 );
if ( $seconds < 60 ) {
$when = 'gerade eben';
$icon = '🔴';
} elseif ( $minutes === 1 ) {
$when = 'vor 1 Minute';
$icon = '🔴';
} elseif ( $minutes < 10 ) {
$when = 'vor ' . $minutes . ' Minuten';
$icon = '🔴';
} else {
$when = 'vor ' . $minutes . ' Minuten';
$icon = '🟡';
}
printf(
'<tr>
<td style="padding:6px 8px 6px 0;">%s <strong>%s</strong></td>
<td style="padding:6px 0;text-align:right;">%s</td>
</tr>',
$icon,
esc_html( $user->display_name ),
esc_html( $when )
);
}
echo '</table>';
echo '<p style="margin:12px 0 0;color:#646970;">
🔴 aktiv innerhalb der letzten 10 Minuten<br>
🟡 aktiv innerhalb der letzten 30 Minuten
</p>';
}Verwendung
- Snippet aktivieren.
- 10 bis 15 Minuten warten.
- Unter Dashboard → Startseite das Widget Aktive Benutzer prüfen.
- Wenn niemand mehr aktiv ist, Updates durchführen.
- Snippet danach wieder deaktivieren.
Hinweis zur Speicherung
Der letzte Aktivitätszeitpunkt wird als Usermeta unter _image2_last_frontend_activity gespeichert.
Der Wert wird bei neuer Aktivität überschrieben. Es entsteht daher keine fortlaufende Historie und keine Logdatei.
Nach dem Deaktivieren können die gespeicherten Werte problemlos bestehen bleiben. Bei einer späteren erneuten Aktivierung sind alte Einträge älter als 30 Minuten und werden nicht mehr angezeigt.