'latest' ); return $updates[0]; } /** * Get available core updates * * @param array $options Set $options['dismissed'] to true to show dismissed upgrades too, * set $options['available'] to false to skip not-dismissed updates. * @return array Array of the update objects */ function get_core_updates( $options = array() ) { $options = array_merge( array( 'available' => true, 'dismissed' => false ), $options ); $dismissed = get_site_option( 'dismissed_update_core' ); if ( ! is_array( $dismissed ) ) $dismissed = array(); $from_api = get_site_transient( 'update_core' ); if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) return false; $updates = $from_api->updates; $result = array(); foreach ( $updates as $update ) { if ( array_key_exists( $update->current . '|' . $update->locale, $dismissed ) ) { if ( $options['dismissed'] ) { $update->dismissed = true; $result[] = $update; } } else { if ( $options['available'] ) { $update->dismissed = false; $result[] = $update; } } } return $result; } /** * Gets the best available (and enabled) Auto-Update for WordPress Core. * * If there's 1.2.3 and 1.3 on offer, it'll choose 1.3 if the install allows it, else, 1.2.3 * * @since 3.7.0 * * @return bool|array False on failure, otherwise the core update offering. */ function find_core_auto_update() { $updates = get_site_transient( 'update_core' ); if ( ! $updates || empty( $updates->updates ) ) return false; include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $auto_update = false; foreach ( $updates->updates as $update ) { if ( 'autoupdate' != $update->response ) continue; if ( ! WP_Automatic_Upgrader::should_auto_update( 'core', $update, ABSPATH ) ) continue; if ( ! $auto_update || version_compare( $update->current, $auto_update->current, '>' ) ) $auto_update = $update; } return $auto_update; } /** * Gets and caches the checksums for the given versions of WordPress * * @since 3.7.0 * * @param $version string|array A single version, or an array of versions to fetch * * @return bool|array False on failure, otherwise the array of checksums, keyed by version */ function get_core_checksums( $version ) { if ( ! is_array( $version ) ) $version = array( $version ); $return = array(); // Check to see if we have cached copies available, if we do, no need to request them foreach ( $version as $i => $v ) { if ( $checksums = get_site_transient( "core_checksums_$v" ) ) { unset( $version[ $i ] ); $return[ $v ] = $checksums; } } // We had cached copies for all of the versions! if ( empty( $version ) ) return $return; $url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query( array( 'version' => $version ), null, '&' ); if ( wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $options = array( 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), ); $response = wp_remote_get( $url, $options ); if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) return false; $body = trim( wp_remote_retrieve_body( $response ) ); $body = json_decode( $body, true ); if ( ! is_array( $body ) || ! isset( $body['checksums'] ) || ! is_array( $body['checksums'] ) ) return false; // Cache the checksums for later foreach ( $version as $v ) { set_site_transient( "core_checksums_$v", $body['checksums'][ $v ], HOUR_IN_SECONDS ); $return[ $v ] = $body['checksums'][ $v ]; } // If the API didn't return anything for a version, explicitly set it's return value to false foreach ( $return as $v => $r ) { if ( empty( $r ) ) $return[ $v ] = false; } return $return; } function dismiss_core_update( $update ) { $dismissed = get_site_option( 'dismissed_update_core' ); $dismissed[ $update->current . '|' . $update->locale ] = true; return update_site_option( 'dismissed_update_core', $dismissed ); } function undismiss_core_update( $version, $locale ) { $dismissed = get_site_option( 'dismissed_update_core' ); $key = $version . '|' . $locale; if ( ! isset( $dismissed[$key] ) ) return false; unset( $dismissed[$key] ); return update_site_option( 'dismissed_update_core', $dismissed ); } function find_core_update( $version, $locale ) { $from_api = get_site_transient( 'update_core' ); if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) return false; $updates = $from_api->updates; foreach ( $updates as $update ) { if ( $update->current == $version && $update->locale == $locale ) return $update; } return false; } function core_update_footer( $msg = '' ) { if ( !current_user_can('update_core') ) return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); $cur = get_preferred_from_update_core(); if ( ! is_object( $cur ) ) $cur = new stdClass; if ( ! isset( $cur->current ) ) $cur->current = ''; if ( ! isset( $cur->url ) ) $cur->url = ''; if ( ! isset( $cur->response ) ) $cur->response = ''; switch ( $cur->response ) { case 'development' : return sprintf( __( 'You are using a development version (%1$s). Cool! Please stay updated.' ), get_bloginfo( 'version', 'display' ), network_admin_url( 'update-core.php' ) ); break; case 'upgrade' : return sprintf( ''.__( 'Get Version %2$s' ).'', network_admin_url( 'update-core.php' ), $cur->current); break; case 'latest' : default : return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); break; } } add_filter( 'update_footer', 'core_update_footer' ); function update_nag() { if ( is_multisite() && !current_user_can('update_core') ) return false; global $pagenow; if ( 'update-core.php' == $pagenow ) return; $cur = get_preferred_from_update_core(); if ( ! isset( $cur->response ) || $cur->response != 'upgrade' ) return false; if ( current_user_can('update_core') ) { $msg = sprintf( __('WordPress %1$s is available! Please update now.'), $cur->current, network_admin_url( 'update-core.php' ) ); } else { $msg = sprintf( __('WordPress %1$s is available! Please notify the site administrator.'), $cur->current ); } echo "