wp_get_attachment_image_src( int $attachment_id, string|int[] $size = 'thumbnail', bool $icon = false )

Retrieves an image to represent an attachment.


Parameters Parameters

$attachment_id

(int) (Required) Image attachment ID.

$size

(string|int[]) (Optional) Image size. Accepts any valid image size name, or an array of width and height values in pixels (in that order).

Default value: 'thumbnail'

$icon

(bool) (Optional) Whether the image should fall back to a mime type icon.

Default value: false


Top ↑

Return Return

(array|false) Array of image data, or boolean false if no image is available.

  • (string) Image source URL.
  • '1'
    (int) Image width in pixels.
  • '2'
    (int) Image height in pixels.
  • '3'
    (bool) Whether the image is a resized image.


Top ↑

Source Source

File: wp-includes/media.php

function wp_get_attachment_image_src( $attachment_id, $size = 'thumbnail', $icon = false ) {
	// Get a thumbnail or intermediate image if there is one.
	$image = image_downsize( $attachment_id, $size );
	if ( ! $image ) {
		$src = false;

		if ( $icon ) {
			$src = wp_mime_type_icon( $attachment_id );

			if ( $src ) {
				/** This filter is documented in wp-includes/post.php */
				$icon_dir = apply_filters( 'icon_dir', ABSPATH . WPINC . '/images/media' );

				$src_file               = $icon_dir . '/' . wp_basename( $src );
				list( $width, $height ) = @getimagesize( $src_file );
			}
		}

		if ( $src && $width && $height ) {
			$image = array( $src, $width, $height, false );
		}
	}
	/**
	 * Filters the attachment image source result.
	 *
	 * @since 4.3.0
	 *
	 * @param array|false  $image         {
	 *     Array of image data, or boolean false if no image is available.
	 *
	 *     @type string $0 Image source URL.
	 *     @type int    $1 Image width in pixels.
	 *     @type int    $2 Image height in pixels.
	 *     @type bool   $3 Whether the image is a resized image.
	 * }
	 * @param int          $attachment_id Image attachment ID.
	 * @param string|int[] $size          Requested size of image. Image size name, or array of width
	 *                                    and height values (in that order).
	 * @param bool         $icon          Whether the image should be treated as an icon.
	 */
	return apply_filters( 'wp_get_attachment_image_src', $image, $attachment_id, $size, $icon );
}


Top ↑

Changelog Changelog

Changelog
Version Description
2.5.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by Marc Heatley

    The #return section gives keys, but the function just returns indexes. We should make it clearer what is returned by this function. And some description or a link to explain is_intermediate

    array{
    	[0] => url,
    	[1] => width</em>
    	[2] => height</em>
    	[4] => is_intermediate
    }
    
  2. Skip to note 3 content
    Contributed by Codex

    Show the first image associated with the post
    This function retrieves the first image associated with a post.

    /**
     * Output a post's first image.
     *
     * @param int $post_id Post ID.
     */
    function wpdocs_echo_first_image( $post_id ) {
    	$args = array(
    		'posts_per_page' => 1,
    		'order'          => 'ASC',
    		'post_mime_type' => 'image',
    		'post_parent'    => $post_id,
    		'post_status'    => null,
    		'post_type'      => 'attachment',
    	);
    
    	$attachments = get_children( $args );
    
    	if ( $attachments ) {
    		echo '<img src="' . wp_get_attachment_thumb_url( $attachments[0]->ID ) . '" class="current">';
    	}
    }
    
  3. Skip to note 6 content
    Contributed by Codex

    Change Icon Directory
    WordPress can use media icons to represent attachment files on your blog and in the Admin interface, if those icons are available.
    For images, it returns the thumbnail. For other media types, it looks for image files named by media type (e.g., audio.jpg) in the directory wp-includes/images/crystal/.

    This example shows how you can change this directory to a folder called “images” in your theme: wp-content/themes/yourtheme/images. Create the folder and put “media type images” in there. To tell WordPress the directory has changed, put this in the current theme’s functions.php file:

    add_filter( 'icon_dir', 'wpdocs_theme_icon_directory' );
    add_filter( 'icon_dir_uri', 'wpdocs_theme_icon_uri' );
    
    /*
     * Return my desired icon directory
     */
    function wpdocs_theme_icon_directory( $icon_dir ) {
    	return get_stylesheet_directory() . '/images';
    }
    
    /*
     * Return my desired icon URI
     */
    function wpdocs_theme_icon_uri( $icon_dir ) {
    	return get_stylesheet_directory_uri() . '/images'; 
    }
    
  4. Skip to note 7 content
    Contributed by CdWritted

    Retrieve the post thumbnail url sized as 220 if thumbnail exists.

    $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 5, 'numberposts' => 5 );
    
    $posts = get_posts( $args );
    
    foreach($posts as $post) {
    	$thumbnail_url = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), array('220','220'), true );
    	$thumbnail_url = $thumbnail_url[0];
    	echo ( !empty($thumbnail_url) ) ? $thumbnail_url : 'No thumb!';
    }
    
  5. Skip to note 8 content
    Contributed by Hay

    A couple of notes on this page mention getting the first image in a post based on get_children. Unfortunately, that won’t work if you’re using the Gutenberg editor. To get the first image from a Gutenberg-based post, you need to parse the blocks. Here’s a function that will return the ID of the first image in a post, or null if there is none.

    function first_image_in_blocks( $id ) {
        $post = get_post( $id );
        $blocks = parse_blocks( $post->post_content );
    
        // Get all blocks that have a core/image blockName
        $images = array_filter( $blocks, function( $block ) {
            return 'core/image' === $block['blockName'];
        } );
    
        // If there are any images, get the id from the first image, otherwise
        // return null
        return count( $images ) > 0 ? $images[0]['attrs']['id'] : null;
    }
    

You must log in before being able to contribute a note or feedback.