Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save brajeshwar/1205901 to your computer and use it in GitHub Desktop.
Save brajeshwar/1205901 to your computer and use it in GitHub Desktop.
Wordpress - Get the Image from Post Thumbnail or the First Image of a post or else use a default Image.
/*
* Display Image from the_post_thumbnail or the first image of a post else display a default Image
* Chose the size from "thumbnail", "medium", "large", "full" or your own defined size using filters.
* USAGE: <?php echo my_image_display(); ?>
*/
function my_image_display($size = 'full') {
if (has_post_thumbnail()) {
$image_id = get_post_thumbnail_id();
$image_url = wp_get_attachment_image_src($image_id, $size);
$image_url = $image_url[0];
} else {
global $post, $posts;
$image_url = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$image_url = $matches [1] [0];
//Defines a default image
if(empty($image_url)){
$image_url = get_bloginfo('template_url') . "/img/default.jpg";
}
}
return $image_url;
}
@lonchbox
Copy link

Could you please show an example of how to apply new image sizes filters ?
Also, after testing it doesn´t work if the post have more than one image :(

@dan74mm
Copy link

dan74mm commented May 26, 2016

Need some help ...
My blog posts/articles, have [img]image-URL[/img] shorcode created in functions.php theme file.

In my blog posts, I use images with this [img] shortcode, something like this:
[img]http://mysite/images/myimage.jpg[/img]

How to make this "first-image" function to get first image from [img]xxx[/img] tag, if I don't have usual <img src="" /> in my blog post?

This is my code:

function catch_first_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $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;
}

Thank you.

@pohau1991
Copy link

before the last if statement, if first_img is empty then you could just do preg_match_all('/[img].+'"['"].*[/\img]/', $post->post_content, $matches2);)
$first_img = $matches2[1][0]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment