diff --git a/src/wp-includes/class-wp-query.php b/src/wp-includes/class-wp-query.php index 0aae0379fe..16e1cfc248 100644 --- a/src/wp-includes/class-wp-query.php +++ b/src/wp-includes/class-wp-query.php @@ -3271,7 +3271,14 @@ class WP_Query { } if ( null === $this->posts ) { - $split_the_query = ( $old_request == $this->request && "{$wpdb->posts}.*" === $fields && ! empty( $limits ) && $q['posts_per_page'] < 500 ); + $split_the_query = ( + $old_request == $this->request + && "{$wpdb->posts}.*" === $fields + && ( + wp_using_ext_object_cache() + || ( ! empty( $limits ) && $q['posts_per_page'] < 500 ) + ) + ); /** * Filters whether to split the query. diff --git a/tests/phpunit/tests/post/nav-menu.php b/tests/phpunit/tests/post/nav-menu.php index c0ae716ab8..a9cfe20e41 100644 --- a/tests/phpunit/tests/post/nav-menu.php +++ b/tests/phpunit/tests/post/nav-menu.php @@ -342,13 +342,13 @@ class Tests_Post_Nav_Menu extends WP_UnitTestCase { add_filter( 'update_post_metadata_cache', array( $action, 'filter' ), 10, 2 ); $start_num_queries = get_num_queries(); - wp_get_nav_menu_items( $this->menu_id ); + wp_get_nav_menu_items( $this->menu_id, array( 'nopaging' => false ) ); $queries_made = get_num_queries() - $start_num_queries; - $this->assertSame( 6, $queries_made, 'Only does 6 database queries when running wp_get_nav_menu_items.' ); + $this->assertSame( 7, $queries_made, 'Only does 7 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.' ); - $this->assertSameSets( $post_ids, $args[1][1], '_prime_post_caches() was not executed.' ); + $this->assertSameSets( $post_ids, $args[2][1], '_prime_post_caches() was not executed.' ); } /** @@ -383,10 +383,10 @@ class Tests_Post_Nav_Menu extends WP_UnitTestCase { add_filter( 'update_post_metadata_cache', array( $action_posts, 'filter' ), 10, 2 ); $start_num_queries = get_num_queries(); - wp_get_nav_menu_items( $this->menu_id ); + wp_get_nav_menu_items( $this->menu_id, array( 'nopaging' => false ) ); get_term_meta( $term_ids[0] ); $queries_made = get_num_queries() - $start_num_queries; - $this->assertSame( 6, $queries_made, 'Only does 6 database queries when running wp_get_nav_menu_items.' ); + $this->assertSame( 7, $queries_made, 'Only does 7 database queries when running wp_get_nav_menu_items.' ); $args = $action_terms->get_args(); $first = reset( $args ); diff --git a/tests/phpunit/tests/post/query.php b/tests/phpunit/tests/post/query.php index f5ecd49b05..9c118cbb9e 100644 --- a/tests/phpunit/tests/post/query.php +++ b/tests/phpunit/tests/post/query.php @@ -775,4 +775,21 @@ class Tests_Post_Query extends WP_UnitTestCase { $this->assertIsInt( $q->found_posts ); } + + /** + * @ticket 57296 + * @covers WP_Query::get_posts + */ + public function test_split_the_query_object_cache() { + $filter = new MockAction(); + add_filter( 'split_the_query', array( $filter, 'filter' ) ); + + $q = new WP_Query( + array( + 'posts_per_page' => 501, + ) + ); + + $this->assertSame( (bool) wp_using_ext_object_cache(), $filter->get_args()[0][0] ); + } }