Title: Replace an Image in WordPress Posts
Last modified: March 3, 2024

---

# Replace an Image in WordPress Posts

 *  Resolved [chcw](https://wordpress.org/support/users/chcw/)
 * (@chcw)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/)
 * I tried to write a PHP snippet to replace an image in a WordPress post, based
   on the sample code [https://developer.wordpress.org/reference/functions/wp_insert_attachment/](https://developer.wordpress.org/reference/functions/wp_insert_attachment/)
   as below:
 *     ```wp-block-code
       <?php 
   
       include "wp-load.php";
   
       // $filename should be the path to a file in the upload directory.
       $filename = 'C:/wamp64/www/blogs/wp-content/uploads/2024/03/test.jpg';
   
       // The ID of the post this attachment is for.
       $parent_post_id = 14;
   
       // Check the type of file. We'll use this as the 'post_mime_type'.
       $filetype = wp_check_filetype( basename( $filename ), null );
   
       // Get the path to the upload directory.
       $wp_upload_dir = wp_upload_dir();
   
       // Prepare an array of post data for the attachment.
       $attachment = array(
           'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ), 
           'post_mime_type' => $filetype['type'],
           'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
           'post_content'   => '',
           'post_status'    => 'inherit',
           'ID' => 15
       );
   
       // Insert the attachment.
       $attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );
   
       // Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
       require_once( ABSPATH . 'wp-admin/includes/image.php' );
   
       // Generate the metadata for the attachment, and update the database record.
       $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
       wp_update_attachment_metadata( $attach_id, $attach_data );
   
       //set_post_thumbnail( $parent_post_id, $attach_id );
       ?>
       ```
   
 * However, when debugging it, wp_update_attachment_metadata will always raise an
   exception and go to WP_Fatal_Error_Handler::handle() function.
 * After the execution, the new image does NOT replace the image attachment with
   ID = 15, instead, it becomes the featured image, which is not desired.

Viewing 8 replies - 1 through 8 (of 8 total)

 *  Moderator [threadi](https://wordpress.org/support/users/threadi/)
 * (@threadi)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17469601)
 * Just to be sure: are you interested in replacing a picture in a post? This image
   is visible in the content of the post? If so, what was used to create the post(
   page builder)? Because depending on this, images are integrated in different 
   ways, which requires different things.
 *  Thread Starter [chcw](https://wordpress.org/support/users/chcw/)
 * (@chcw)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17469720)
 * [@threadi](https://wordpress.org/support/users/threadi/)
 * Yes, correct. I want to replace an image that is visible in the post content.
   The post is created with the classic editor(not block editor).
 *  Moderator [threadi](https://wordpress.org/support/users/threadi/)
 * (@threadi)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17469904)
 * In the Classic Editor, the HTML code is generated directly after you have inserted
   the image. To change the image in it, you would have to search the `post_content`
   for the image to be replaced and adapt the URL and ID in the HTML code to the
   new image. I don’t think there is ready-made code for this, but it would probably
   be possible.
 *  Thread Starter [chcw](https://wordpress.org/support/users/chcw/)
 * (@chcw)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17469912)
 * [@threadi](https://wordpress.org/support/users/threadi/)
 * Thank you. As in classic editor UI, there is an option to select an image in 
   the post content, and then click “Replace” button to place it with another image,
   so I guess there is a ready-to-used function to implement such a function.
 * Anyway, if I have to hardcode the img tag to the post contents, need I still 
   attach the image as an attachment for the post? What is the necessary to attach
   the image if I can replace it with the img tag directly?
 *  Moderator [bcworkz](https://wordpress.org/support/users/bcworkz/)
 * (@bcworkz)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17470121)
 * I’m pretty sure the editor/media library’s replacement function is JS based and
   would be difficult to extract for your own use, especially if you use PHP to 
   do so.
 * You could use `preg_replace()` to search for appropriate image HTML and replace
   its src URL and related attributes with a those of different image. The replacement
   image doesn’t _have_ to be one with a related attachment post, but if it does
   not you will not be able to manipulate it with the media library like you can
   with other images. The only requirement is that the URL be accessible over the
   internet.
 * You could even reference a remote image on an entirely unrelated site (if CORS
   headers don’t prevent it). I would discourage such a practice, but it is possible
   to do.
 *  Thread Starter [chcw](https://wordpress.org/support/users/chcw/)
 * (@chcw)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17470132)
 * [@bcworkz](https://wordpress.org/support/users/bcworkz/)
 * Thank you very much. I will make a try.
 *  Thread Starter [chcw](https://wordpress.org/support/users/chcw/)
 * (@chcw)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17470639)
 * [@bcworkz](https://wordpress.org/support/users/bcworkz/)
 * I hope the new image can be same as the old image, which can be edited in editor
   which different sizes, alignment, etc. So other than replace the img tag, I also
   want to replace the attachment accordingly. But why wp_update_attachment_metadata
   will always raise an exception and go to WP_Fatal_Error_Handler::handle() function?
 *  Thread Starter [chcw](https://wordpress.org/support/users/chcw/)
 * (@chcw)
 * [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17470888)
 * The issue is solved. After execution, the script will always go to WP_Fatal_Error_Handler::
   handle() to deal possible errors, even if there are no errors. So now everything
   is fine.

Viewing 8 replies - 1 through 8 (of 8 total)

The topic ‘Replace an Image in WordPress Posts’ is closed to new replies.

## Tags

 * [image](https://wordpress.org/support/topic-tag/image/)
 * [post](https://wordpress.org/support/topic-tag/post/)

 * In: [Developing with WordPress](https://wordpress.org/support/forum/wp-advanced/)
 * 8 replies
 * 3 participants
 * Last reply from: [chcw](https://wordpress.org/support/users/chcw/)
 * Last activity: [2 years, 3 months ago](https://wordpress.org/support/topic/replace-an-image-in-wordpress-posts/#post-17470888)
 * Status: resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
