diff --git a/wp-includes/class-wp-query.php b/wp-includes/class-wp-query.php index 458b7898c2..3833a7a5a5 100644 --- a/wp-includes/class-wp-query.php +++ b/wp-includes/class-wp-query.php @@ -3270,10 +3270,11 @@ class WP_Query { return $post_parents; } + $is_unfiltered_query = $old_request == $this->request && "{$wpdb->posts}.*" === $fields; + if ( null === $this->posts ) { $split_the_query = ( - $old_request == $this->request - && "{$wpdb->posts}.*" === $fields + $is_unfiltered_query && ( wp_using_ext_object_cache() || ( ! empty( $limits ) && $q['posts_per_page'] < 500 ) @@ -3337,6 +3338,8 @@ class WP_Query { $this->posts = array_map( 'get_post', $this->posts ); } + $unfiltered_posts = $this->posts; + if ( $q['cache_results'] && $id_query_is_cacheable && ! $cache_found ) { $post_ids = wp_list_pluck( $this->posts, 'ID' ); @@ -3529,7 +3532,12 @@ class WP_Query { $this->posts = array_map( 'get_post', $this->posts ); if ( $q['cache_results'] ) { - update_post_caches( $this->posts, $post_type, $q['update_post_term_cache'], $q['update_post_meta_cache'] ); + if ( $is_unfiltered_query && $unfiltered_posts === $this->posts ) { + update_post_caches( $this->posts, $post_type, $q['update_post_term_cache'], $q['update_post_meta_cache'] ); + } else { + $post_ids = wp_list_pluck( $this->posts, 'ID' ); + _prime_post_caches( $post_ids, $q['update_post_term_cache'], $q['update_post_meta_cache'] ); + } } /** @var WP_Post */ diff --git a/wp-includes/version.php b/wp-includes/version.php index 6707e420de..7c8e34c749 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.4-alpha-56655'; +$wp_version = '6.4-alpha-56656'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.