get_post_thumbnail_id()WP 2.9.0

Gets the ID of the current (or specified) post thumbnail (featured image). Gets ID of WP attachment (image).

Can be used inside the WordPress Loop.

To be able to define a post thumbnail (featured image), you need to activate this feature - add_theme_support( 'post-thumbnails' ) in the theme functions.php file.

That thumbnail ID is stored in _thumbnail_id custom field.

Use get_the_post_thumbnail_url() to get the URL of thumbnail.

Use set_post_thumbnail() to set the post thumbnail:

set_post_thumbnail( $post_id, $thumbnail_id );
1 time — 0.00126 sec (very slow) | 50000 times — 0.28 sec (very fast) | PHP 7.1.5, WP 4.8.1
Hooks from the function


Int|false. Post thumbnail ID (which can be 0 if the thumbnail is not set), or false if the post does not exist.


get_post_thumbnail_id( $post );
Post ID or WP_Post object.
Default: global $post


#1. Get the ID of the main image (thumbnail) of the post:

$post_thumbnail_id = get_post_thumbnail_id( $post ); // 123

#2. Get all attachments of the current post, except thumbnails

To output all files attached to the post except for thumbnails you can use the following code. Variable $post must be defined!

To get the entries (attachments) we use function get_posts().

global $post;

$attachments = get_posts( [
	'post_type'   => 'attachment',
	'numberposts' => -1,
	'post_status' => null,
	'post_parent' => $post->ID,
	'exclude'     => get_post_thumbnail_id()
] );

if ( $attachments ) {
	foreach ( $attachments as $attachment ) {
		echo apply_filters( 'the_title', $attachment->post_title );
		the_attachment_link( $attachment->ID, false );



Since 2.9.0 Introduced.
Since 4.4.0 $post can be a post ID or WP_Post object.
Since 5.5.0 The return value for a non-existing post was changed to false instead of an empty string.

Code of get_post_thumbnail_id() WP 5.9.3

function get_post_thumbnail_id( $post = null ) {
	$post = get_post( $post );

	if ( ! $post ) {
		return false;

	$thumbnail_id = (int) get_post_meta( $post->ID, '_thumbnail_id', true );

	 * Filters post thumbnail ID.
	 * @since 5.9.0
	 * @param int|false        $thumbnail_id Post thumbnail ID or false if the post does not exist.
	 * @param int|WP_Post|null $post         Post ID or WP_Post object. Default is global `$post`.
	return (int) apply_filters( 'post_thumbnail_id', $thumbnail_id, $post );