diff --git a/wp-includes/ms-default-filters.php b/wp-includes/ms-default-filters.php index de1ce0739..e533252f4 100644 --- a/wp-includes/ms-default-filters.php +++ b/wp-includes/ms-default-filters.php @@ -39,6 +39,8 @@ add_action( 'delete_post', 'wpmu_update_blogs_date' ); add_action( 'private_to_published', 'wpmu_update_blogs_date' ); add_action( 'publish_phone', 'wpmu_update_blogs_date' ); add_action( 'publish_post', 'wpmu_update_blogs_date' ); +add_action( 'admin_init', 'wp_schedule_update_network_counts'); +add_action( 'update_network_counts', 'wp_update_network_counts'); // Files add_filter( 'wp_upload_bits', 'upload_is_file_too_big' ); @@ -57,7 +59,6 @@ if ( ! defined('EDIT_ANY_USER') || ! EDIT_ANY_USER ) // back compat constant. add_filter( 'enable_edit_any_user_configuration', '__return_false' ); add_filter( 'force_filtered_html_on_import', '__return_true' ); - // WP_HOME and WP_SITEURL should not have any effect in MS remove_filter( 'option_siteurl', '_config_wp_siteurl' ); remove_filter( 'option_home', '_config_wp_home' ); diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php index ddc8d2bf2..95990a362 100644 --- a/wp-includes/ms-functions.php +++ b/wp-includes/ms-functions.php @@ -148,8 +148,7 @@ function is_user_member_of_blog( $user_id, $blog_id = 0 ) { /** * The number of active users in your installation. * - * This function also saves the count as a site option, - * which speeds up future lookups. + * The count is cached and updated twice daily. This is not a live count. * * @since MU 2.7 * @uses update_site_option() @@ -157,25 +156,13 @@ function is_user_member_of_blog( $user_id, $blog_id = 0 ) { * @return int */ function get_user_count() { - global $wpdb; - - $count_ts = get_site_option( 'user_count_ts' ); - if ( time() - $count_ts > 3600 ) { - $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(ID) as c FROM $wpdb->users WHERE spam = '0' AND deleted = '0'") ); - update_site_option( 'user_count', $count ); - update_site_option( 'user_count_ts', time() ); - } - - $count = get_site_option( 'user_count' ); - - return $count; + return get_site_option( 'user_count' ); } /** * The number of active sites on your installation. * - * This function also saves the count as a site option, - * which speeds up future lookups. + * The count is cached and updated twice daily. This is not a live count. * * @since MU 1.0 * @uses update_site_option() @@ -184,21 +171,7 @@ function get_user_count() { * @return int */ function get_blog_count( $id = 0 ) { - global $wpdb; - - if ( $id == 0 ) - $id = $wpdb->siteid; - - $count_ts = get_site_option( 'blog_count_ts' ); - if ( time() - $count_ts > 3600 ) { - $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(blog_id) as c FROM $wpdb->blogs WHERE site_id = %d AND spam = '0' AND deleted = '0' and archived = '0'", $id) ); - update_site_option( 'blog_count', $count ); - update_site_option( 'blog_count_ts', time() ); - } - - $count = get_site_option( 'blog_count' ); - - return $count; + return get_site_option( 'blog_count' ); } /** @@ -1533,4 +1506,32 @@ function filter_SSL( $url ) { return $url; } +/** + * Schedule update of the network-wide counts for the current network. + * + * @since 3.1.0 + */ +function wp_schedule_update_network_counts() { + if ( !is_main_site() ) + return; + + if ( !wp_next_scheduled('update_network_counts') && !defined('WP_INSTALLING') ) + wp_schedule_event(time(), 'twicedaily', 'update_network_counts'); +} + +/** + * Update the network-wide counts for the current network. + * + * @since 3.1.0 + */ +function wp_update_network_counts() { + global $wpdb; + + $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(blog_id) as c FROM $wpdb->blogs WHERE site_id = %d AND spam = '0' AND deleted = '0' and archived = '0'", $wpdb->siteid) ); + update_site_option( 'blog_count', $count ); + + $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(ID) as c FROM $wpdb->users WHERE spam = '0' AND deleted = '0'") ); + update_site_option( 'user_count', $count ); +} + ?>