Media: Account for post ID queries in `update_post_thumbnail_cache()`.

Updates `update_post_thumbnail_cache()` to account for `WP_Query` objects that only contain the post ID field rather than the entire post object.

This changes passes the `$post` value to `get_post_thumbnail_id()` rather than assuming the presence of the ID property. Additionally, the posts to which the thumbnail is attached are now primed prior to calling the function to avoid numerous unnecessary database queries.

The test `WP_Test_REST_Posts_Controller::test_get_items_primes_parent_post_caches()` is modified to account for an order of operations change for the priming of post meta caches. The cache is no longer primed in the final call to `update_meta_cache()` so the tests need to account for the post meta to be primed in any call to the function.

Props antpb, jorbin, khokansardar, linsoftware, mukesh27, oglekler, rajinsharwar, sumitsingh, xendo.
Fixes #59521.

Built from https://develop.svn.wordpress.org/trunk@59235


git-svn-id: http://core.svn.wordpress.org/trunk@58627 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Peter Wilson 2024-10-14 22:22:10 +00:00
parent 940e899c7d
commit f5c1486c99
2 changed files with 19 additions and 2 deletions

View File

@ -112,8 +112,25 @@ function update_post_thumbnail_cache( $wp_query = null ) {
$thumb_ids = array();
/*
* $wp_query may contain an array of post objects or post IDs.
*
* This ensures the cache is primed for all post objects to avoid
* `get_post()` calls in `get_the_post_thumbnail()` triggering an
* additional database call for each post.
*/
$parent_post_ids = array();
foreach ( $wp_query->posts as $post ) {
$id = get_post_thumbnail_id( $post->ID );
if ( $post instanceof WP_Post ) {
$parent_post_ids[] = $post->ID;
} elseif ( is_int( $post ) ) {
$parent_post_ids[] = $post;
}
}
_prime_post_caches( $parent_post_ids, false, true );
foreach ( $wp_query->posts as $post ) {
$id = get_post_thumbnail_id( $post );
if ( $id ) {
$thumb_ids[] = $id;
}

View File

@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
$wp_version = '6.7-beta2-59234';
$wp_version = '6.7-beta2-59235';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.