From 5a497225b286964ff9302a21272731172840ed05 Mon Sep 17 00:00:00 2001 From: Jonny Harris Date: Fri, 6 Jan 2023 10:34:00 +0000 Subject: [PATCH] Query: Stop priming posts twice in `WP_Query`. Part revert of [54352]. In cases where queries are not split, then it results in priming posts that are already loaded resulting in a superfluous database query. Props spacedmonkey, flixos90, peterwilsoncc. Fixes #57373. git-svn-id: https://develop.svn.wordpress.org/trunk@55035 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-query.php | 3 +-- tests/phpunit/tests/post/nav-menu.php | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/class-wp-query.php b/src/wp-includes/class-wp-query.php index 0f29f1f3a3..a6b105ef28 100644 --- a/src/wp-includes/class-wp-query.php +++ b/src/wp-includes/class-wp-query.php @@ -3476,8 +3476,7 @@ class WP_Query { $this->posts = array_map( 'get_post', $this->posts ); if ( $q['cache_results'] ) { - $post_ids = wp_list_pluck( $this->posts, 'ID' ); - _prime_post_caches( $post_ids, $q['update_post_term_cache'], $q['update_post_meta_cache'] ); + update_post_caches( $this->posts, $post_type, $q['update_post_term_cache'], $q['update_post_meta_cache'] ); } /** @var WP_Post */ diff --git a/tests/phpunit/tests/post/nav-menu.php b/tests/phpunit/tests/post/nav-menu.php index b9bca49318..dc7cc74e2d 100644 --- a/tests/phpunit/tests/post/nav-menu.php +++ b/tests/phpunit/tests/post/nav-menu.php @@ -298,7 +298,7 @@ class Tests_Post_Nav_Menu extends WP_UnitTestCase { $start_num_queries = get_num_queries(); wp_get_nav_menu_items( $this->menu_id ); $queries_made = get_num_queries() - $start_num_queries; - $this->assertSame( 7, $queries_made, 'Only does 7 database queries when running wp_get_nav_menu_items.' ); + $this->assertSame( 6, $queries_made, 'Only does 6 database queries when running wp_get_nav_menu_items.' ); $args = $action->get_args(); $this->assertSameSets( $menu_nav_ids, $args[0][1], '_prime_post_caches() was not executed.' ); @@ -339,7 +339,7 @@ class Tests_Post_Nav_Menu extends WP_UnitTestCase { $start_num_queries = get_num_queries(); wp_get_nav_menu_items( $this->menu_id ); $queries_made = get_num_queries() - $start_num_queries; - $this->assertSame( 7, $queries_made, 'Only does 7 database queries when running wp_get_nav_menu_items.' ); + $this->assertSame( 6, $queries_made, 'Only does 6 database queries when running wp_get_nav_menu_items.' ); $args = $action_terms->get_args(); $last = end( $args );