Get the first image from post content (eg.: hotlinked images)

I am using this code directly from the codex.

function echo_first_image ($postID)
    $args = array(
    'numberposts' => 1,
    'order'=> 'ASC',
    'post_mime_type' => 'image',
    'post_parent' => $postID,
    'post_status' => null,
    'post_type' => 'attachment'

    $attachments = get_children( $args );


    if ($attachments) {
        foreach($attachments as $attachment) {
            $image_attributes = wp_get_attachment_image_src( $attachment->ID, 'thumbnail' )  ? wp_get_attachment_image_src( $attachment->ID, 'thumbnail' ) : wp_get_attachment_image_src( $attachment->ID, 'full' );

            echo '<img src="'.wp_get_attachment_thumb_url( $attachment->ID ).'" class="current">';


I call it within the loop like this echo_first_image ($post->ID);

The function does call but nothing gets output … as far as I can see there is nothing in $attachments

I do have an image in the post I am using. It’s not a featured image or in a gallery, just in the post.

Am I doing something wrong, or is there something wrong with the code in the first place?


If you want display an image that is inserted into your content (a hotlinked image, for example), you must use a function like this (source):

add in functions.php:

function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  if(empty($first_img)){ //Defines a default image
    $first_img = "/images/default.jpg";
  return $first_img;

Then place <?php echo catch_that_image() ?> where you want display the image.

Note: a hotlinked image just placed in your content can’t be set as Featured Image, a bultin WordPress’feature.

Leave a Comment