set_post_thumbnail()
Set a post thumbnail.
No Hooks.
Return
Int|true|false
. True on success, false on failure.
Usage
set_post_thumbnail( $post, $thumbnail_id );
- $post(int|WP_Post) (required)
- Post ID or post object where thumbnail should be attached.
- $thumbnail_id(int) (required)
- Thumbnail to attach.
Examples
#1 Programmatically setup an uploaded image file as a thumbnail
/* * $file is the path to your uploaded file (for example as set in the $_FILE posted file array) * $filename is the name of the file * first we need to upload the file into the wp upload folder. */ $upload_file = wp_upload_bits( $filename, null, @file_get_contents( $file ) ); if( ! $upload_file['error'] ){ // if succesfull insert the new file into the media // library (create a new attachment post type). $wp_filetype = wp_check_filetype( $filename, null ); $attachment = [ 'post_mime_type' => $wp_filetype['type'], 'post_parent' => $post_id, 'post_title' => preg_replace( '/\.[^.]+$/', '', $filename ), 'post_content' => '', 'post_status' => 'inherit', ]; $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $post_id ); if( ! is_wp_error( $attachment_id ) ){ // if attachment post was successfully created, insert it as a thumbnail to the post $post_id. require_once( ABSPATH . "wp-admin" . '/includes/image.php' ); $attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] ); wp_update_attachment_metadata( $attachment_id, $attachment_data ); set_post_thumbnail( $post_id, $attachment_id ); } }
#2 Set up a thumbnail of the posts
Let's say we want to set a thumbnail for post with ID=56. We know the ID of the media file (attachment) - it is 89:
$post_id = 56; $attach_id = 89; $set_thumb = set_post_thumbnail( $post_id, $attach_id ); if( $set_thumb ) echo 'The miniature is set.'; else echo 'The thumbnail has been deleted.';
#3 Automatic installation of thumbnail posts
This code will automatically put a thumbnail of the post when you save it. If the post has no thumbnail.
The first picture attached to the post will be grabbed.
add_action( 'future_to_publish', 'autoset_featured' ); add_action( 'draft_to_publish', 'autoset_featured' ); add_action( 'new_to_publish', 'autoset_featured' ); add_action( 'pending_to_publish', 'autoset_featured' ); //add_action( 'the_post', 'autoset_featured' ); add_action( 'save_post', 'autoset_featured' ); function autoset_featured() { global $post; // check for a post thumbnail if( has_post_thumbnail( $post->ID ) ) return; $attached_image = get_children( [ 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'numberposts' => 1, 'order' => 'ASC', ] ); // make a condition to check for a picture if( $attached_image ){ foreach( $attached_image as $attachment_id => $attachment ){ set_post_thumbnail($post->ID, $attachment_id); } } }
Changelog
Since 3.1.0 | Introduced. |
set_post_thumbnail() set post thumbnail code WP 6.4.3
function set_post_thumbnail( $post, $thumbnail_id ) { $post = get_post( $post ); $thumbnail_id = absint( $thumbnail_id ); if ( $post && $thumbnail_id && get_post( $thumbnail_id ) ) { if ( wp_get_attachment_image( $thumbnail_id, 'thumbnail' ) ) { return update_post_meta( $post->ID, '_thumbnail_id', $thumbnail_id ); } else { return delete_post_meta( $post->ID, '_thumbnail_id' ); } } return false; }