This post was published 10 years ago

There's a chance things are out of date or no longer reflect my views today

Ways to get post thumbnails in Wordpress

With Wordpress there are a lot of ways to the same thing, for good reason, sometimes you can’t do it one way or the other. This can make it tricky to remember how to do it for each instance. At least this is the case for me. I want to use this post to serve as a guide for each method of doing so. I won’t be covering their parameters, just the necessary steps to retrieve an image.

2,181 views

Ways to get post thumbnails in Wordpress (featured image)

With Wordpress there are a lot of ways to the same thing, for good reason, sometimes you can’t do it one way or the other. This can make it tricky to remember how to do it for each instance. At least this is the case for me. I want to use this post to serve as a guide for each method of doing so. I won’t be covering their parameters, just the necessary steps to retrieve an image.

These functions are commonly used during the loop, because with the_post() it gives us access. Though they can be used anywhere, in custom loops or custom post types, with a minor change.

Everywhere the_post_thumbnail() is mentioned it can equally be replaced with echo get_the_post_thumbnail(). It depends on your preferences.

while ( have_posts() ) : the_post();

  the_post_thumbnail();

endwhile;

Inside a custom post type is very much like the loop, however, we have to call the_post() on the WP_Query object.

$custom_post_type = new WP_Query( array(
  'post_type'      => 'portfolio',
  'post_status'    => 'publish',
  'posts_per_page' => -1,
) );

while ( $custom_post_type->have_posts() ) : $custom_post_type->the_post();

  the_post_thumbnail();
  
endwhile;

Sometimes you may want to get the image src to use it for an inline style. You have access to an array which will return the URL, width, and height.

Everywhere the_post_thumbnail() is mentioned it can equally be replaced with echo get_the_post_thumbnail(). It depends on your preferences.

while ( have_posts() ) : the_post();

  the_post_thumbnail_url();

endwhile;

Very similar, again, we need to make sure we set up the template tags.

$custom_post_type = new WP_Query( array(
  'post_type'      => 'portfolio',
  'post_status'    => 'publish',
  'posts_per_page' => -1,
) );

while ( $custom_post_type->have_posts() ) : $custom_post_type->the_post();
  
  the_post_thumbnail_url();
  
endwhile;

Setting up the post template tags is much more convenient, however, for completeness you can do it without those. However, it does give you access to a few more attributes this way.

while ( have_posts() ) : the_post();

  $image = wp_get_attachment_image_src($post_id);
  $image_url = $image[0];
  $image_width = $image[1];
  $image_height = $image[2];
  
endwhile;

$custom_post_type = new WP_Query( array(
  'post_type'      => 'portfolio',
  'post_status'    => 'publish',
  'posts_per_page' => -1,
) );

while ( $custom_post_type->have_posts() ) : $custom_post_type->the_post();

  $image = wp_get_attachment_image_src($custom_post_type->ID);
  $image_url = $image[0];
  $image_width = $image[1];
  $image_height = $image[2];
  
endwhile;

Outside of a loop we don’t have access to the_post(). So using setup_postdata() is a close equivalent of doing that. Which gives us access to the template tag functions. You won’t need to do this frequently, but it is handy for certain situations.

function custom_post_thumbnail()
{
  global $post;
  setup_postdata($post);

  the_post_thumbnail();
}

It can then be used like any other function in your template, in or out of the loop.

custom_post_thumbnail();

You could also add an action to your template.

do_action('before_single_post_loop');

while ( have_posts() ) : the_post();

  // Post content

endwhile;

function custom_post_thumbnail()
{
  global $post;
  setup_postdata($post);

  the_post_thumbnail();
}

add_action('before_single_post_loop', 'custom_post_thumbnail');

These are all the ways that I’ve come across to add a post thumbnail. Are there any I have forgot? Let me know on twitter.

View on Github