Make WordPress Core


Ignore:
Timestamp:
06/10/2022 01:37:52 PM (2 years ago)
Author:
spacedmonkey
Message:

Prime users cache in WP_Query and post REST API controller.

For a call to WP_Query or a post REST API request that contains posts from multiple authors, call the cache_users function, to ensure that all user data for post authors is primed in
a single database query. This results in far fewer database queries on multiple author sites.

Props spacedmonkey, timothyblynjacobs, peterwilsoncc.
Fixes #55716.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/query.php

    r53370 r53482  
    622622
    623623    /**
     624     * @ticket 55716
     625     */
     626    public function test_prime_user_cache() {
     627        $action = new MockAction();
     628        add_filter( 'update_user_metadata_cache', array( $action, 'filter' ), 10, 2 );
     629        $user_ids = array();
     630        $count    = 5;
     631        for ( $i = 0; $i < $count; $i ++ ) {
     632            $user_ids[ $i ] = self::factory()->user->create();
     633            self::factory()->post->create(
     634                array(
     635                    'post_type'   => 'post',
     636                    'post_author' => $user_ids[ $i ],
     637                )
     638            );
     639        }
     640
     641        $q = new WP_Query(
     642            array(
     643                'post_type'      => 'post',
     644                'posts_per_page' => $count,
     645            )
     646        );
     647        while ( $q->have_posts() ) {
     648            $q->the_post();
     649        }
     650
     651        $args      = $action->get_args();
     652        $last_args = end( $args );
     653        $this->assertSameSets( $user_ids, $last_args[1], 'Ensure that user ids are primed' );
     654    }
     655
     656    /**
    624657     * @ticket 35601
    625658     */
Note: See TracChangeset for help on using the changeset viewer.