The post_thumbnail_id WordPress PHP filter allows you to modify the ID of a post thumbnail before it’s displayed on your website.
Usage
add_filter( 'post_thumbnail_id', 'your_custom_function', 10, 2 );
function your_custom_function( $thumbnail_id, $post ) {
// your custom code here
return $thumbnail_id;
}
Parameters
$thumbnail_id int|false– The ID of the post thumbnail, or false if the post does not exist.$post int|WP_Post|null– The Post ID or WP_Post object. The default is the global$postvariable.
More information
See WordPress Developer Resources: post_thumbnail_id
Examples
Change Thumbnail ID for Specific Post
Replace the thumbnail ID for a specific post with another image ID.
function replace_thumbnail_id( $thumbnail_id, $post ) {
if ( $post->ID == 42 ) {
$thumbnail_id = 123; // Replace with the new image ID
}
return $thumbnail_id;
}
add_filter( 'post_thumbnail_id', 'replace_thumbnail_id', 10, 2 );
Show Default Thumbnail for Posts Without Thumbnail
Show a default thumbnail for posts that don’t have a thumbnail set.
function set_default_thumbnail( $thumbnail_id, $post ) {
if ( !$thumbnail_id ) {
$thumbnail_id = 456; // Set the default thumbnail ID
}
return $thumbnail_id;
}
add_filter( 'post_thumbnail_id', 'set_default_thumbnail', 10, 2 );
Swap Thumbnail ID for Even and Odd Posts
Display different thumbnails for even and odd post IDs.
function swap_even_odd_thumbnail( $thumbnail_id, $post ) {
if ( $post->ID % 2 == 0 ) {
$thumbnail_id = 789; // Thumbnail ID for even post IDs
} else {
$thumbnail_id = 101112; // Thumbnail ID for odd post IDs
}
return $thumbnail_id;
}
add_filter( 'post_thumbnail_id', 'swap_even_odd_thumbnail', 10, 2 );
Display Random Thumbnail from a Pool
Choose a random thumbnail from a predefined pool of image IDs.
function random_thumbnail_from_pool( $thumbnail_id, $post ) {
$pool = array( 131415, 161718, 192021 ); // Array of image IDs
$thumbnail_id = $pool[array_rand( $pool )];
return $thumbnail_id;
}
add_filter( 'post_thumbnail_id', 'random_thumbnail_from_pool', 10, 2 );
Remove Thumbnails from a Specific Category
Remove post thumbnails for a specific category.
function remove_thumbnail_for_category( $thumbnail_id, $post ) {
if ( in_category( 'no-thumbnails', $post ) ) {
$thumbnail_id = false; // Remove the thumbnail
}
return $thumbnail_id;
}
add_filter( 'post_thumbnail_id', 'remove_thumbnail_for_category', 10, 2 );