Since WordPress doesn’t have any support for a “default thumbnail” and there isn’t any filters that works directly on get_post_thumbnail(), the_post_thumbnail(), get_post_thumbnail_id(), get_the_post_thumbnail(), etc – we need to hook the filter get_post_metadata.
/*
* Fall back to a hard coded default thumbnail if a thumbnail doesn't already exist
*/
function custom_filter_get_post_metadata($metadata, $object_id, $meta_key, $single)
{
if(isset($meta_key) && '_thumbnail_id' === $meta_key)
{
//Temporarily remove filter to fetch the real data, since it's not sent as a parameter to this filter
remove_filter('get_post_metadata', 'custom_filter_get_post_metadata', true, 4);
// Get real thumbnail id
$existing_thumbnail = get_post_meta($object_id,'_thumbnail_id',true);
// Set it to a fallback ID if it doesn't already exist
if (empty($existing_thumbnail)) $result = 3372; << CHANGE THIS ID TO A ATTACHMENT ID!!!
// Re-enable the filter
add_filter('get_post_metadata', 'custom_filter_get_post_metadata', true, 4);
if(!empty($result))
return $result;
}
return $metadata;
}
add_filter('get_post_metadata', 'custom_filter_get_post_metadata', true, 4);
