wp/wp-includes/post-thumbnail-template.php
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
equal deleted inserted replaced
-1:000000000000 0:d970ebf37754
       
     1 <?php
       
     2 /**
       
     3  * WordPress Post Thumbnail Template Functions.
       
     4  *
       
     5  * Support for post thumbnails
       
     6  * Themes function.php must call add_theme_support( 'post-thumbnails' ) to use these.
       
     7  *
       
     8  * @package WordPress
       
     9  * @subpackage Template
       
    10  */
       
    11 
       
    12 /**
       
    13  * Check if post has an image attached.
       
    14  *
       
    15  * @since 2.9.0
       
    16  *
       
    17  * @param int $post_id Optional. Post ID.
       
    18  * @return bool Whether post has an image attached.
       
    19  */
       
    20 function has_post_thumbnail( $post_id = null ) {
       
    21 	return (bool) get_post_thumbnail_id( $post_id );
       
    22 }
       
    23 
       
    24 /**
       
    25  * Retrieve Post Thumbnail ID.
       
    26  *
       
    27  * @since 2.9.0
       
    28  *
       
    29  * @param int $post_id Optional. Post ID.
       
    30  * @return int
       
    31  */
       
    32 function get_post_thumbnail_id( $post_id = null ) {
       
    33 	$post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
       
    34 	return get_post_meta( $post_id, '_thumbnail_id', true );
       
    35 }
       
    36 
       
    37 /**
       
    38  * Display Post Thumbnail.
       
    39  *
       
    40  * @since 2.9.0
       
    41  *
       
    42  * @param string|array $size Optional. Image size. Defaults to 'post-thumbnail', which theme sets using set_post_thumbnail_size( $width, $height, $crop_flag );.
       
    43  * @param string|array $attr Optional. Query string or array of attributes.
       
    44  */
       
    45 function the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) {
       
    46 	echo get_the_post_thumbnail( null, $size, $attr );
       
    47 }
       
    48 
       
    49 /**
       
    50  * Update cache for thumbnails in the current loop
       
    51  *
       
    52  * @since 3.2
       
    53  *
       
    54  * @param object $wp_query Optional. A WP_Query instance. Defaults to the $wp_query global.
       
    55  */
       
    56 function update_post_thumbnail_cache( $wp_query = null ) {
       
    57 	if ( ! $wp_query )
       
    58 		$wp_query = $GLOBALS['wp_query'];
       
    59 
       
    60 	if ( $wp_query->thumbnails_cached )
       
    61 		return;
       
    62 
       
    63 	$thumb_ids = array();
       
    64 	foreach ( $wp_query->posts as $post ) {
       
    65 		if ( $id = get_post_thumbnail_id( $post->ID ) )
       
    66 			$thumb_ids[] = $id;
       
    67 	}
       
    68 
       
    69 	if ( ! empty ( $thumb_ids ) ) {
       
    70 		_prime_post_caches( $thumb_ids, false, true );
       
    71 	}
       
    72 
       
    73 	$wp_query->thumbnails_cached = true;
       
    74 }
       
    75 
       
    76 /**
       
    77  * Retrieve Post Thumbnail.
       
    78  *
       
    79  * @since 2.9.0
       
    80  *
       
    81  * @param int $post_id Optional. Post ID.
       
    82  * @param string $size Optional. Image size. Defaults to 'post-thumbnail'.
       
    83  * @param string|array $attr Optional. Query string or array of attributes.
       
    84  */
       
    85 function get_the_post_thumbnail( $post_id = null, $size = 'post-thumbnail', $attr = '' ) {
       
    86 	$post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
       
    87 	$post_thumbnail_id = get_post_thumbnail_id( $post_id );
       
    88 
       
    89 	/**
       
    90 	 * Filter the post thumbnail size.
       
    91 	 *
       
    92 	 * @since 2.9.0
       
    93 	 *
       
    94 	 * @param string $size The post thumbnail size.
       
    95 	 */
       
    96 	$size = apply_filters( 'post_thumbnail_size', $size );
       
    97 
       
    98 	if ( $post_thumbnail_id ) {
       
    99 
       
   100 		/**
       
   101 		 * Fires before fetching the post thumbnail HTML.
       
   102 		 *
       
   103 		 * Provides "just in time" filtering of all filters in wp_get_attachment_image().
       
   104 		 *
       
   105 		 * @since 2.9.0
       
   106 		 *
       
   107 		 * @param string $post_id           The post ID.
       
   108 		 * @param string $post_thumbnail_id The post thumbnail ID.
       
   109 		 * @param string $size              The post thumbnail size.
       
   110 		 */
       
   111 		do_action( 'begin_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size );
       
   112 		if ( in_the_loop() )
       
   113 			update_post_thumbnail_cache();
       
   114 		$html = wp_get_attachment_image( $post_thumbnail_id, $size, false, $attr );
       
   115 
       
   116 		/**
       
   117 		 * Fires after fetching the post thumbnail HTML.
       
   118 		 *
       
   119 		 * @since 2.9.0
       
   120 		 *
       
   121 		 * @param string $post_id           The post ID.
       
   122 		 * @param string $post_thumbnail_id The post thumbnail ID.
       
   123 		 * @param string $size              The post thumbnail size.
       
   124 		 */
       
   125 		do_action( 'end_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size );
       
   126 
       
   127 	} else {
       
   128 		$html = '';
       
   129 	}
       
   130 	/**
       
   131 	 * Filter the post thumbnail HTML.
       
   132 	 *
       
   133 	 * @since 2.9.0
       
   134 	 *
       
   135 	 * @param string $html              The post thumbnail HTML.
       
   136 	 * @param string $post_id           The post ID.
       
   137 	 * @param string $post_thumbnail_id The post thumbnail ID.
       
   138 	 * @param string $size              The post thumbnail size.
       
   139 	 * @param string $attr              Query string of attributes.
       
   140 	 */
       
   141 	return apply_filters( 'post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr );
       
   142 }