From 70a4181fc7ef48637b8108305a412c9c16f215ae Mon Sep 17 00:00:00 2001 From: nacin Date: Thu, 12 May 2011 03:06:03 +0000 Subject: [PATCH] Cache post thumbnails in the loop. props garyc40, scribu, greuben. fixes #15447. git-svn-id: http://svn.automattic.com/wordpress/trunk@17883 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/post-thumbnail-template.php | 32 +++++++++++++++++++++++++ wp-includes/query.php | 9 +++++++ 2 files changed, 41 insertions(+) diff --git a/wp-includes/post-thumbnail-template.php b/wp-includes/post-thumbnail-template.php index 3758d1d47..38ae9039a 100644 --- a/wp-includes/post-thumbnail-template.php +++ b/wp-includes/post-thumbnail-template.php @@ -47,6 +47,36 @@ function the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) { echo get_the_post_thumbnail( null, $size, $attr ); } +/** + * Update cache for thumbnails in the current loop + * + * @sicne 3.2 + */ +function update_post_thumbnail_cache() { + global $wp_query; + + if ( $wp_query->thumbnails_cached ) + return; + + $thumb_ids = array(); + foreach ( $wp_query->posts as $post ) { + if ( $id = get_post_thumbnail_id( $post->ID ) ) + $thumb_ids[] = $id; + } + + if ( ! empty ( $thumb_ids ) ) { + get_posts( array( + 'update_post_term_cache' => false, + 'include' => $thumb_ids, + 'post_type' => 'attachment', + 'post_status' => 'inherit', + 'nopaging' => true + ) ); + } + + $wp_query->thumbnails_cached = true; +} + /** * Retrieve Post Thumbnail. * @@ -62,6 +92,8 @@ function get_the_post_thumbnail( $post_id = null, $size = 'post-thumbnail', $att $size = apply_filters( 'post_thumbnail_size', $size ); if ( $post_thumbnail_id ) { do_action( 'begin_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size ); // for "Just In Time" filtering of all of wp_get_attachment_image()'s filters + if ( in_the_loop() ) + update_post_thumbnail_cache(); $html = wp_get_attachment_image( $post_thumbnail_id, $size, false, $attr ); do_action( 'end_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size ); } else { diff --git a/wp-includes/query.php b/wp-includes/query.php index fb50b72d8..0b788dde8 100644 --- a/wp-includes/query.php +++ b/wp-includes/query.php @@ -1257,6 +1257,15 @@ class WP_Query { */ var $query_vars_changed = true; + /** + * Set if post thumbnails are cached + * + * @since 3.2 + * @access public + * @var bool + */ + var $thumbnails_cached = false; + /** * Resets query flags to false. *