Durchschnittliches Kontoalter

Ich versuche herauszufinden, ob es eine Möglichkeit gibt, ein durchschnittliches Alter von Benutzerkonten zu finden, die über meine WordPress-Seite kamen, ohne das Alter des Administratorkontos anzugeben.

Wenn ich Alter sage, meine ich nicht ihr tatsächliches Geburtsalter, sondern die Amtszeit ihres Kontos.

Gibt es eine einfache Möglichkeit, dies zu bestimmen?

Solutions Collecting From Web of "Durchschnittliches Kontoalter"

WordPress zeichnet auf, wenn ein Benutzer in der $wpdb->users (normalerweise wp_users ) in der Spalte user_registered . So können Sie das durchschnittliche Kontoalter berechnen. Es gibt keine interne function dafür, also müssen Sie $wpdb direkt verwenden.

Diese Stackoverflow-Antwort enthält einige gute Informationen zur Berechnung des Durchschnitts einer Reihe von Daten. Übersetzt zu WordPress-functionen und so:

 < ?php function wpse106440_avg_account_age($ignore=1) { global $wpdb; return $wpdb->get_col($wpdb->prepare( "SELECT DATEDIFF(CURDATE(), MIN(user_registered)) / (COUNT(ID) - 1)" . " FROM {$wpdb->users}" . " WHERE ID <> %d", $ignore )); } 

Wenn Ihre Administrator-ID 1 , dann …

 < ?php $avg_age = wpse106440_avg_account_age(1); 

... wäre das durchschnittliche Kontoalter ohne den Administrator.

Wenn Sie beispielsweise alle Benutzer auf Administratorebene ausschließen möchten, müssen Sie Benutzer über get_users dieser Rolle get_users dann das Array dieser IDs ausschließen (z. B. NOT IN ). WP hat keine separaten Tabellen für Rollen und Caps, was es schwierig macht, sie direkt in SQL abzufragen - die Fähigkeiten eines Benutzers werden als serialisiertes Array gespeichert.

Wie @chrisguitarguy sagte, gibt es dafür keine interne function. Unten ist meine vorgeschlagene Lösung. Es sollte jeden Benutzer mit der Rolle “Administrator” ignorieren.

 function user_duration_wpse_106440() { global $wpdb; $admins = get_users(array('role' => 'administrator','fields' => 'ID')); $today = date_create(); $sql = "SELECT user_registered FROM {$wpdb->users}"; if (!empty($admins)) { $sql .= " WHERE ID NOT IN (".implode(',',$admins).")"; } $users = $wpdb->get_col($sql); foreach ($users as $k => $v) { $age = date_diff($today,date_create($v)); $users[$k] = $age->days; } // return on the average as a string // return array_sum($users) / count($users); // alternate; return both average and total return array( 'average' => (array_sum($users) / count($users)), 'total' => count($users) ); } // echo user_duration_wpse_106440(); $user_duration = user_duration_wpse_106440(); echo $user_duration['average']; echo '
'; echo $user_duration['total'];

Dies ergibt einen vernünftigen Durchschnitt beim Testen auf meinem Server. Es gibt übrigens eine Antwort in “Tagen”.

Ich spiele mit einigen Varianten. Ich kann andere Versionen veröffentlichen.