mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-10-04 14:47:02 +00:00
Users: Introduce the concept of a large site in order to speed up the Users screen when there are many users.
Calling the `count_users()` function is expensive, regardless of the counting strategy that's used, and it gets slower the more users there are on a site. In order to speed up the Users screen in the admin area, calling `count_users()` can be avoided entirely while still displaying the total count for users. This introduces some new functions: * `wp_is_large_user_count()` * `wp_get_active_user_count()` * `wp_update_active_user_count()` A corresponding `wp_is_large_user_count` filter is also introduced. Props tharsheblows, johnbillion Fixes #38741 git-svn-id: https://develop.svn.wordpress.org/trunk@41613 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -166,27 +166,48 @@ class WP_Users_List_Table extends WP_List_Table {
|
||||
global $role;
|
||||
|
||||
$wp_roles = wp_roles();
|
||||
$count_users = true;
|
||||
|
||||
if ( wp_is_large_user_count() ) {
|
||||
$count_users = false;
|
||||
} elseif ( is_multisite() && wp_is_large_network( 'users' ) ) {
|
||||
$count_users = false;
|
||||
}
|
||||
|
||||
if ( $this->is_site_users ) {
|
||||
$url = 'site-users.php?id=' . $this->site_id;
|
||||
switch_to_blog( $this->site_id );
|
||||
$users_of_blog = count_users( 'time', $this->site_id );
|
||||
restore_current_blog();
|
||||
if ( $count_users ) {
|
||||
switch_to_blog( $this->site_id );
|
||||
$users_of_blog = count_users( 'time', $this->site_id );
|
||||
restore_current_blog();
|
||||
}
|
||||
} else {
|
||||
$url = 'users.php';
|
||||
$users_of_blog = count_users();
|
||||
if ( $count_users ) {
|
||||
$users_of_blog = count_users();
|
||||
}
|
||||
}
|
||||
|
||||
$total_users = $users_of_blog['total_users'];
|
||||
$avail_roles =& $users_of_blog['avail_roles'];
|
||||
unset($users_of_blog);
|
||||
if ( $count_users ) {
|
||||
$total_users = $users_of_blog['total_users'];
|
||||
$avail_roles =& $users_of_blog['avail_roles'];
|
||||
unset($users_of_blog);
|
||||
} else {
|
||||
$avail_roles = array();
|
||||
}
|
||||
|
||||
$class = empty($role) ? ' class="current"' : '';
|
||||
$role_links = array();
|
||||
$role_links['all'] = "<a href='$url'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_users, 'users' ), number_format_i18n( $total_users ) ) . '</a>';
|
||||
|
||||
if ( $count_users ) {
|
||||
$role_links['all'] = "<a href='$url'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_users, 'users' ), number_format_i18n( $total_users ) ) . '</a>';
|
||||
} else {
|
||||
$role_links['all'] = "<a href='$url'$class>" . _x( 'All', 'users' ) . '</a>';
|
||||
}
|
||||
foreach ( $wp_roles->get_names() as $this_role => $name ) {
|
||||
if ( !isset($avail_roles[$this_role]) )
|
||||
if ( $count_users && !isset($avail_roles[$this_role]) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$class = '';
|
||||
|
||||
@@ -195,12 +216,14 @@ class WP_Users_List_Table extends WP_List_Table {
|
||||
}
|
||||
|
||||
$name = translate_user_role( $name );
|
||||
/* translators: User role name with count */
|
||||
$name = sprintf( __('%1$s <span class="count">(%2$s)</span>'), $name, number_format_i18n( $avail_roles[$this_role] ) );
|
||||
if ( $count_users ) {
|
||||
/* translators: User role name with count */
|
||||
$name = sprintf( __('%1$s <span class="count">(%2$s)</span>'), $name, number_format_i18n( $avail_roles[$this_role] ) );
|
||||
}
|
||||
$role_links[$this_role] = "<a href='" . esc_url( add_query_arg( 'role', $this_role, $url ) ) . "'$class>$name</a>";
|
||||
}
|
||||
|
||||
if ( ! empty( $avail_roles['none' ] ) ) {
|
||||
if ( ! $count_users || ! empty( $avail_roles['none' ] ) ) {
|
||||
|
||||
$class = '';
|
||||
|
||||
@@ -209,8 +232,10 @@ class WP_Users_List_Table extends WP_List_Table {
|
||||
}
|
||||
|
||||
$name = __( 'No role' );
|
||||
/* translators: User role name with count */
|
||||
$name = sprintf( __('%1$s <span class="count">(%2$s)</span>'), $name, number_format_i18n( $avail_roles['none' ] ) );
|
||||
if ( $count_users ) {
|
||||
/* translators: User role name with count */
|
||||
$name = sprintf( __('%1$s <span class="count">(%2$s)</span>'), $name, number_format_i18n( $avail_roles['none' ] ) );
|
||||
}
|
||||
$role_links['none'] = "<a href='" . esc_url( add_query_arg( 'role', 'none', $url ) ) . "'$class>$name</a>";
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user