--- a/wp/wp-includes/post-thumbnail-template.php Fri Sep 05 18:40:08 2025 +0200
+++ b/wp/wp-includes/post-thumbnail-template.php Fri Sep 05 18:52:52 2025 +0200
@@ -19,7 +19,7 @@
* @since 2.9.0
* @since 4.4.0 `$post` can be a post ID or WP_Post object.
*
- * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
+ * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global `$post`.
* @return bool Whether the post has an image attached.
*/
function has_post_thumbnail( $post = null ) {
@@ -46,7 +46,7 @@
* @since 5.5.0 The return value for a non-existing post
* was changed to false instead of an empty string.
*
- * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
+ * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global `$post`.
* @return int|false Post thumbnail ID (which can be 0 if the thumbnail is not set),
* or false if the post does not exist.
*/
@@ -99,7 +99,7 @@
*
* @global WP_Query $wp_query WordPress Query object.
*
- * @param WP_Query $wp_query Optional. A WP_Query instance. Defaults to the $wp_query global.
+ * @param WP_Query|null $wp_query Optional. A WP_Query instance. Defaults to the $wp_query global.
*/
function update_post_thumbnail_cache( $wp_query = null ) {
if ( ! $wp_query ) {
@@ -112,8 +112,25 @@
$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;
}
@@ -139,10 +156,10 @@
* @since 2.9.0
* @since 4.4.0 `$post` can be a post ID or WP_Post object.
*
- * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
- * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array of
- * width and height values in pixels (in that order). Default 'post-thumbnail'.
- * @param string|array $attr Optional. Query string or array of attributes. Default empty.
+ * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global `$post`.
+ * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array of
+ * width and height values in pixels (in that order). Default 'post-thumbnail'.
+ * @param string|array $attr Optional. Query string or array of attributes. Default empty.
* @return string The post thumbnail image tag.
*/
function get_the_post_thumbnail( $post = null, $size = 'post-thumbnail', $attr = '' ) {
@@ -224,9 +241,9 @@
*
* @since 4.4.0
*
- * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
- * @param string|int[] $size Optional. Registered image size to retrieve the source for or a flat array
- * of height and width dimensions. Default 'post-thumbnail'.
+ * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global `$post`.
+ * @param string|int[] $size Optional. Registered image size to retrieve the source for or a flat array
+ * of height and width dimensions. Default 'post-thumbnail'.
* @return string|false Post thumbnail URL or false if no image is available. If `$size` does not match
* any registered image size, the original image URL will be returned.
*/
@@ -274,7 +291,7 @@
*
* @since 4.6.0
*
- * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
+ * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global `$post`.
* @return string Post thumbnail caption.
*/
function get_the_post_thumbnail_caption( $post = null ) {
@@ -298,7 +315,7 @@
*
* @since 4.6.0
*
- * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
+ * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global `$post`.
*/
function the_post_thumbnail_caption( $post = null ) {
/**